• 蓝桥杯练习


    即约分数

    题目

    思路

    遍历所有的x,y,判断x/y是不是即越约分数。

    代码

    1. #include
    2. using namespace std;
    3. int gcd(int x,int y)
    4. {
    5. int r;
    6. while(y!=0)
    7. {
    8. r=x%y;
    9. x=y;
    10. y=r;
    11. }
    12. return x;
    13. }
    14. int main()
    15. {
    16. // 请在此输入您的代码
    17. int sum=4039;//1/y和x/1都是
    18. for(int x=2;x<=2020;x++)
    19. {
    20. for(int y=2;y<=2020;y++)
    21. {
    22. int m=gcd(x,y);
    23. if(m==1) sum++;
    24. }
    25. }
    26. cout<
    27. return 0;
    28. }

     

    蛇形填数

    题目

     思路

    设i为某个数所在行,j为某个数所在列。(i+j)为偶数时,蛇形矩阵往右上方走,(i+j)为奇数时,蛇形矩阵往左下方走。(20+20)为偶数,往右上方走。所以mat[20][20]=mat[39][1]+19=mat[38][1]+20=1+2+...+38+20;

    代码

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. // 请在此输入您的代码
    6. int sum=0;
    7. for(int i=1;i<=38;i++)
    8. sum+=i;
    9. sum+=20;
    10. cout<
    11. return 0;
    12. }

     七段码

    题目

    思路

    总共七个二极管,每一个都可以选或不选,列举完七个二极管选或不选后,判断选好的二极管有没有连成一片(如果只选了一个那就不用判断)。

    代码

    1. #include
    2. using namespace std;
    3. int used[10];
    4. int sum;
    5. int num;//使用灯泡的数量
    6. bool find(int n)
    7. {//找有没有与n相邻的灯泡在使用
    8. switch (n)
    9. {
    10. case 1: if(used[2]||used[6]) return true; break;
    11. case 2: if(used[1]||used[3]||used[7]) return true;break;
    12. case 3: if(used[2]||used[4]||used[7]) return true;break;
    13. case 4: if(used[3]||used[5]) return true;break;
    14. case 5: if(used[4]||used[6]||used[7]) return true;break;
    15. case 6: if(used[1]||used[5]||used[7]) return true;break;
    16. case 7: if(used[2]||used[3]||used[5]||used[6]) return true;break;
    17. }
    18. return false;
    19. }
    20. void dfs(int depth)
    21. {
    22. if(depth>7)
    23. {
    24. if(num==1)
    25. {
    26. sum++;
    27. return ;
    28. }
    29. for(int k=1;k<=7;k++)
    30. {
    31. if(used[k]==1&&!find(k))
    32. {//如果在使用的灯泡没有相邻灯泡在使用,那不符合。
    33. return ;
    34. }
    35. }
    36. sum++;
    37. return ;
    38. }
    39. //用这一个
    40. used[depth]=1;
    41. num++;
    42. dfs(depth+1);
    43. //不用这一个
    44. used[depth]=0;
    45. num--;
    46. dfs(depth+1);
    47. }
    48. int main()
    49. {
    50. sum=0;
    51. num=0;
    52. dfs(1);
    53. cout<
    54. }

    结果

    这个代码直接提交会超时,估计是递归次数太多,但是题目要求输出结果即可。所以我们可以在dev上先运行出结果,然后直接提交输出那个结果。 

    跑步锻炼

    题目

    思路

    遍历2000.1.1到2020.10.1的每一天,周一或初一就+2,否则+1,最后输出。

    代码

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. // 请在此输入您的代码
    6. int sum=0;
    7. int year=2000,month=1,day=1;
    8. int week=6;
    9. int a[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    10. //2000,2004,2008,2012,2016,2020
    11. while(!(year==2020&&month==10&&day==2))
    12. {
    13. if(day==1||week==1){
    14. sum+=2;
    15. }else{
    16. sum+=1;
    17. }
    18. day++;
    19. if(week==7) week=1;
    20. else week++;
    21. week%=8;
    22. //跨月
    23. if(day==a[month]+1){
    24. //跨年
    25. if(month==12){
    26. month=0;//出去还会+变成1
    27. year++;
    28. if(year==2004||year==2008||year==2012||year==2016||year==2020) a[2]=29;
    29. else a[2]=28;
    30. }
    31. //跨越不跨年
    32. month++;
    33. day=1;
    34. }
    35. }
    36. cout<
    37. return 0;
    38. }

    结果 

    平方和

    题目

    思路

    遍历1到2019计算平方和

    代码

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. // 请在此输入您的代码
    6. long long sum=14362;
    7. for(int i=41;i<=99;i++)
    8. {
    9. int a=i%10;
    10. int b=i/10;
    11. if(a==2||a==0||a==1||a==9||b==0||b==1||b==9||b==2)
    12. sum+=i*i;
    13. }
    14. for(long long i=100;i<=999;i++)
    15. {
    16. int a=i%10;
    17. int b=i/10%10;
    18. int c=i/100;
    19. if(a==2||a==0||a==1||a==9||b==2||b==0||b==1||b==9||c==2||c==0||c==1||c==9)
    20. sum+=i*i;
    21. }
    22. for(long long i=1000;i<=2019;i++)
    23. {
    24. int a=i%10;
    25. int b=i/10%10;
    26. int c=i/10/10%10;
    27. int d=i/1000;
    28. if(a==2||a==0||a==1||a==9||b==2||b==0||b==1||b==9||c==2||c==0||c==1||c==9||d==2||d==1||d==0||d==9)
    29. sum+=i*i;
    30. }
    31. cout<
    32. return 0;
    33. }

    结果

    数列求值

    题目

    思路

    从i=4开始遍历到20190324,维护前三项,遍历完成后输出第三项。

    代码

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. long long a=1,b=1,c=1,t;
    6. for(int i=4;i<=20190324;i++)
    7. {
    8. t=(a+b+c)%10000;
    9. a=b;
    10. b=c;
    11. c=t;
    12. }
    13. cout<
    14. return 0;
    15. }

    结果

    总结

    蓝桥杯的题目主要考的是数学和枚举的能力。 

  • 相关阅读:
    对Docker基础镜像的思考,该不该选择alpine
    WPF —— 动画
    static const与static constexpr的类内数据成员初始化
    通过数(判断一个数是否在集合M中)
    servlet -> spring-mvc -> spring-boot-> spring-security目录
    mybatis03
    Linux环境下安装docker环境(亲测无坑)
    几个网站的百度收录都被清空,对方这是什么操作?怎么破?
    Apollo planning之PathBoundsDecider
    DeFi 入门必备:你需要了解的 DeFi 重要词语
  • 原文地址:https://blog.csdn.net/m0_73441691/article/details/134254937