当前位置:   article > 正文

蓝桥杯-幸运数 and 有奖问答

蓝桥杯-幸运数 and 有奖问答

第一题不做赘述,直接上代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=100000000;
  4. int init=[](){
  5. int res=0;
  6. for(int i=1;i<=N;i*=10){
  7. int tmp=i,count=0;
  8. while(tmp) {
  9. ++count;
  10. tmp/=10;
  11. }
  12. if(count&1)continue;
  13. for(int j=i;j<i*10;++j){
  14. int sum=0;
  15. tmp=j;
  16. for(int k=count;k>0;--k,tmp/=10){
  17. if(k>count/2)sum+=(tmp%10);
  18. else sum-=(tmp%10);
  19. }
  20. if(!sum)++res;
  21. }
  22. }
  23. return res;
  24. }();
  25. int main(){
  26. cout<<init<<endl;
  27. return 0;
  28. }

第二题,我刷背包问题刷成傻子了一直往背包问题思考,后面实在不行我就换了思路。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. long long B=[](){
  4. long long dp[31][10]={0};//防止答案大于INT_MAX
  5. dp[0][0]=1;
  6. for(int i=1;i<=30;++i){
  7. for(int j=0;j<=9;++j){//如果小明100分就停止作答,不符合最后得分70的情况
  8. if(j>0)//答对:在0~j-1尾部后面加上true,不影响分数为j的情况
  9. dp[i][j]=dp[i-1][j-1];
  10. else//答错:在题目为i-1时所有分数后面加上false,统统都变成了0分
  11. for(int k=0;k<=9;++k)
  12. dp[i][0]+=dp[i-1][k];
  13. }
  14. }
  15. return dp[30][7];
  16. }();
  17. int main(){
  18. cout<<B<<endl;
  19. return 0;
  20. }

第一题答案:4430091

 第二题答案:4165637

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/929811
推荐阅读
相关标签
  

闽ICP备14008679号