当前位置:   article > 正文

蓝桥杯同一类型题目汇总_蓝桥杯题目

蓝桥杯题目

目录

一、双循环快速暴力求解

1、蓝桥杯第十一届真题—《门牌制作》

2、蓝桥杯第十届真题—《平方和》

3、蓝桥杯第十二届真题—《乘积尾零》

4、蓝桥杯第十二届真题—《卡片》


一、双循环快速暴力求解

1、蓝桥杯第十一届真题—《门牌制作》

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int cnt;
  5. int main()
  6. {
  7. for (int i = 1; i <= 2020; i++)
  8. {
  9. for (int j = i; j; j /= 10)
  10. if (j % 10 == 2) cnt++;
  11. }
  12. printf("%d", cnt);
  13. return 0;
  14. }

2、蓝桥杯第十届真题—《平方和》

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. long long sum;
  5. int main()
  6. {
  7. for (int i = 1; i <= 2019; i++)
  8. {
  9. for (int j = i; j; j /= 10)
  10. {
  11. if (j % 10 == 2 || j % 10 == 0 || j % 10 == 1 || j % 10 == 9)
  12. {
  13. sum += i * i;
  14. break;
  15. }
  16. }
  17. }
  18. printf("%lld", sum);
  19. return 0;
  20. }

3、蓝桥杯第十二届真题—《乘积尾零》

这道题有两种方法

1:就是直接算,算出两个数的乘积以后,先判断末尾有几个零再之后,就可以把零去掉然后取数的后四位再与下一个数相乘

2:分解质因数,看看有多少个5以及多少个2。

从后往前数0的个数

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int a[11][11];
  5. int cnt;
  6. int main()
  7. {
  8. long long sum = 1;
  9. for (int i = 0; i < 10; i++)
  10. {
  11. for (int j = 0; j < 10; j++)
  12. {
  13. scanf("%d", &a[i][j]);
  14. sum *= a[i][j];
  15. while (sum % 10 == 0)
  16. {
  17. cnt++;
  18. sum /= 10;
  19. }
  20. //if (sum > 10000)
  21. sum = sum % 10000;
  22. }
  23. }
  24. printf("% d", cnt);
  25. return 0;
  26. }

分解质因数法

  1. #include<iostream>
  2. using namespace std;
  3. int a[11][11];
  4. int cnt;
  5. int sum2, sum5;
  6. //分解质因子,数出2和5搭配的对数
  7. //2的个数
  8. int fun_2(int num)
  9. {
  10. int sum = 0;
  11. while (num % 2 == 0)
  12. {
  13. num /= 2;
  14. sum++;
  15. }
  16. return sum;
  17. }
  18. //5的个数
  19. int fun_5(int num)
  20. {
  21. int sum = 0;
  22. while (num % 5 == 0)
  23. {
  24. num /= 5;
  25. sum++;
  26. }
  27. return sum;
  28. }
  29. int main()
  30. {
  31. for (int i = 0; i < 10; i++)
  32. {
  33. for (int j = 0; j< 10; j++)
  34. {
  35. scanf("%d", &a[i][j]);
  36. sum2 += fun_2(a[i][j]);
  37. sum5 += fun_5(a[i][j]);
  38. }
  39. }
  40. cnt = min(sum2, sum5);
  41. //(sum2 + sum5) / 2;//错误写法
  42. //(2 * sum2 + 5 * sum5) / 7;//错误写法
  43. printf("%d", cnt);
  44. return 0;
  45. }

4、蓝桥杯第十二届真题—《卡片》

经典双循环

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int num1=2021,flag=0;
  6. for(int i=1; ;i++)//不知道i到哪个数停止,所以i=1到...(未知)
  7. {
  8. flag=i;
  9. for(int j=i;j;j/=10)//判断每个数i的每一位的数字是什么
  10. {
  11. if(j%10==1) num1--;
  12. if(num1==0)
  13. {
  14. cout << flag << endl;
  15. return 0;
  16. }
  17. }
  18. }
  19. }

异曲同工

  1. #include <iostream>
  2. using namespace std;
  3. int num[10];
  4. bool check(int x)
  5. {
  6. while (x)
  7. {
  8. int now = x % 10;
  9. if (num[now] > 0)
  10. num[now]--;
  11. else
  12. return false;
  13. x /= 10;
  14. }
  15. return true;
  16. }
  17. int main()
  18. {
  19. for (int i = 0; i < 10; i++)
  20. num[i] = 2021;
  21. for (int i = 1; ;i++)
  22. {
  23. if (!check(i)) //如果该数i已经用完了
  24. {
  25. cout << i - 1 << endl;//这个i是拼不出来的,所以只能拼出i-1
  26. break;
  27. }
  28. }
  29. return 0;
  30. }

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

闽ICP备14008679号