当前位置:   article > 正文

2014年蓝桥杯B组初赛(第五届)_2014蓝桥杯b

2014蓝桥杯b

第一题:暴力
tips:一开始用直接用题目中的带有小数点的数据运行不出来,上下乘以10以后再计算就出来了,所以说,在蓝桥杯比赛中对于这种只需要填出最终结果的小题,能用整形就用整形,避免浮点型的数以防出错。

#include<iostream>
using namespace std;
int main(){
    int a=82.3/1.9;
    for(int yl=1;yl<=a;yl++){
        for(int pj=1;pj<=yl;pj++){
            if(pj*2.3+yl*1.9==82.3){
                cout<<pj<<endl;
            }
        }
    }
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

第二题:数学
找出通项:y=2^i+1,i表示剪了多少刀

y=2^10+1=1025
  • 1

第三题:
递归求解。

#include<iostream>
using namespace std;
int ans=0;
void dfs(int index,int store,int flower,int wine){
    if(index>14){return ;}
    if(index==14){
        if(store==5&&flower==9&&wine==1){
            ans++;
        }

    }
    //遇到店
    dfs(index+1,store+1,flower,2*wine);
    //遇到花
    dfs(index+1,store,flower+1,wine-1);
}

int main(){

    dfs(0,0,0,2);
    cout<<ans<<endl;
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

第四题:

if(r>0) return i;
  • 1

第五题:
可以多次尝试,凑出答案

f(a,rank-1,row,cow+w/2)
  • 1

第六题:
暴力枚举,小心这里数据,不要用除法,条件判断那里可以用乘法替代。
注意精度的问题:

if(1.0*a*d/b/c==1.0*(10*a+d)/(10*b+c)) //不要忘记乘以1.0
  • 1
#include<iostream>
using namespace std;
int ans=0;
int main(){
    for(int a=1;a<=9;a++){
        for(int b=1;b<=9;b++){
            for(int c=1;c<=9;c++){
                for(int d=1;d<=9;d++){
                    if(a*d*(10*b+c)==(10*a+d)*b*c && (a!=b||(c!=d))){
                        ans++;
                    }
                }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

第七题:
dfs

#include<iostream>
using namespace std;
bool vis[9];
int num[9]={2,4,5,6,7,9,10,11,12};
int a[9];
int ans=0;

void pd(){
    int t1=1+a[0]+a[8]+a[4];
    int t2=a[4]+a[5]+a[6]+a[7];
    int t3=1+a[1]+a[3]+a[7];
    int t4=8+a[0]+a[1]+a[2];
    int t5=a[2]+a[3]+a[6]+3;
    int t6=8+a[8]+a[5]+3;
    if(t1==t2 &&t2==t3 && t3==t4 && t4==t5 &&t5==t6 ){
        cout<<a[8]<<endl;
    }
}

void dfs(int index){
    if(index==9){
        pd();
        return ;
    }

    for(int i=0;i<9;i++){
        if(!vis[i]){
            vis[i]=true;
            a[index]=num[i];
            dfs(index+1);
            vis[i]=false;
        }
    }

}
int main(){
    dfs(0);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

也可以用全排列解决这道题目。

#include <iostream>
#include<algorithm>
using namespace std;

int main()
{
    int a[13]={0};
    for(int i=0;i<12;i++)
        a[i]=i+1;
    while(next_permutation(a,a+12))
    {
        int t=a[1]+a[2]+a[3]+a[4];
        if(a[0]==1&&a[1]==8&&a[11]==3&&t==a[7]+a[8]+a[9]+a[10]&&t==a[0]+a[2]+a[5]+a[7]
                &&t==a[4]+a[6]+a[9]+a[11]&&t==a[1]+a[5]+a[8]+a[11]&&t==a[0]+a[3]+a[6]+a[10])
        {
            cout<<a[5];
        }


    }
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

第九题:dfs
这道题和李白喝酒那道题比较类似,可以结合的看一下。

#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int a[100][100];
ll ans;
int n,m,k;

void dfs(int x,int y,int pre,int max){
    if(pre>k) return ;
    if(x==n-1 && y==m-1){
        //走到终点的时候要么恰好拿了k件,或者拿到了k-1件,最后一个礼物大于之前任何礼物的价值
        if(pre==k || (pre==k-1 && max<a[x][y])){
            ans++;
        }
        return ;
    }

    if(x<n-1){ //向下走
        if(a[x][y]>max)
            dfs(x+1,y,pre+1,a[x][y]);
        dfs(x+1,y,pre,max);
    }

    if(y<m-1){  //向右走
        if(a[x][y]>max)
            dfs(x,y+1,pre+1,a[x][y]);
        dfs(x,y+1,pre,max);
    }
}

int main(){
    while(cin>>n>>m>>k){
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                cin>>a[i][j];
            }
        }
        ans=0;
        dfs(0,0,0,-INF);
        cout<<ans%1000000007<<endl;
    }
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/302712
推荐阅读
相关标签
  

闽ICP备14008679号