题解:P9230 [蓝桥杯 2023 省 A] 填空问题

· · 题解

A. 幸运数

由于是提交答案题,所以直接写个暴力枚举即可。但也不至于从 1100000000 一个个枚举,只需枚举偶数位的数即可。

int A(){
    int cnt=0;
    for(int i=1;i<=7;i+=2){//偶数位的数为 10 的奇数次方
        int x=pow(10,i);//计算起始数
        for(int j=x;j<=x*10-1;j++){//一个个枚举
            int sum1=0,sum2=0,jj=j;
            for(int k=1;k<=i/2+1;k++) sum1+=jj%10,jj/=10;//计算前面一半的数位之和
            for(int k=1;k<=i/2+1;k++) sum2+=jj%10,jj/=10;//计算后面一半的数位之和
            if(sum1==sum2) cnt++;//计数器+1
        }
    }
    return cnt;
}

答案为 4430091

B. 有奖问答

由于是提交答案题,所以直接写个搜索即可。

int b=0;
void dfs(int score,int cnt){
    if(score==70) b++;//获得了 70 分答案+1
    if(score==100||cnt>=30) return ;//到达 100 分或做完 30 道题目
    cnt++;//做完题目
    dfs(0,cnt);//错误
    dfs(score+10,cnt);//正确
}
int B(){
    dfs(0,0);//各自从 0 开始
    return b;
}

答案为 8335366

还是那句话,由于是提交答案题,所以直接根据模板输出答案即可。

代码就不摆了(这你懒得打???),放个记录显示我过了。