当前位置:   article > 正文

蓝桥杯备战——完全日期_2001 年 1 1 月 1 1 日到 2021 2021 年 12 12 月 31 31 日中,一

2001 年 1 1 月 1 1 日到 2021 2021 年 12 12 月 31 31 日中,一共有多少个完全日

问题描述

  如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。

问2001年1月1日到2021年12月31日有多少完美日期

模拟日期遍历至20211231即可

  1. //问2001年1月1到2021年12月31有多少个完全日期
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. bool check(int y,int m,int d)
  5. {
  6. int ans=0;
  7. while(y)
  8. {
  9. ans+=y%10;
  10. y/=10;
  11. }
  12. while(m)
  13. {
  14. ans+=m%10;
  15. m/=10;
  16. }
  17. while(d)
  18. {
  19. ans+=d%10;
  20. d/=10;
  21. }
  22. for(int i=1;i<=9;i++)
  23. if(i*i==ans)
  24. return 1;
  25. return 0;
  26. }
  27. int a[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}};
  28. int run(int y)
  29. {
  30. if(y%400==0)
  31. return 1;
  32. if(y%4==0&&y%100!=0)
  33. return 1;
  34. return 0;
  35. }
  36. int day(int y,int m)
  37. {
  38. return a[run(y)][m];
  39. }
  40. int main()
  41. {
  42. int y=2001,m=1,d=1;
  43. int ans=0;
  44. while(1)
  45. {
  46. for(int i=d;i<=day(y,m);i++)
  47. {
  48. if(check(y,m,d))
  49. ans++;
  50. d++;
  51. }
  52. if(y==2021&&m==12)
  53. break;
  54. d=1;
  55. m++;
  56. if(m==13)
  57. {
  58. m=1;
  59. y++;
  60. }
  61. }
  62. cout<<ans<<endl;
  63. return 0;
  64. }
  65. //ans=977

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

闽ICP备14008679号