鱼C论坛

 找回密码
 立即注册
查看: 139|回复: 1

[技术交流] 记录遇见的一道题目

[复制链接]
发表于 2025-3-9 15:26:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 player-none 于 2025-3-15 12:20 编辑


                               
登录/注册后可看大图


                               
登录/注册后可看大图


                               
登录/注册后可看大图


  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int getdays(int y,int m){
  5.     int a;
  6.     if(m==1){
  7.         a=31;
  8.     }else if(m==2){
  9.         if(y%400==0)a=29;
  10.         else if(y%100==0)a=28;
  11.         else if(y%4==0)a=29;
  12.         else a=28;
  13.     }else if(m==3){
  14.         a=31;
  15.     }else if(m==4){
  16.         a=30;
  17.     }else if(m==5){
  18.         a=31;
  19.     }else if(m==6){
  20.         a=30;
  21.     }else if(m==7){
  22.         a=31;
  23.     }else if(m==8){
  24.         a=31;
  25.     }else if(m==9){
  26.         a=30;
  27.     }else if(m==10){
  28.         a=31;
  29.     }else if(m==11){
  30.         a=30;
  31.     }else{
  32.         a=31;
  33.     }
  34.     return a;
  35. }
  36. bool ishuiwen(int x){
  37.     string s=to_string(x);
  38.     string sb=s;
  39.     reverse(s.begin(),s.end());
  40.     return sb==s;
  41. }
  42. int main()
  43. {
  44.         int date1,date2,y,m,d,count=0;
  45.         cin>>date1>>date2;
  46.     y=date1/10000;
  47.     m=date1%10000/100;
  48.     d=date1%100;
  49.     while(y*10000+m*100+d<=date2){
  50.         if(ishuiwen(y*10000+m*100+d)){
  51.             count+=1;
  52.         }
  53.             int a=getdays(y,m);
  54.             if(d+1<=a){
  55.                 d+=1;
  56.             }else if(m+1<=12){
  57.                 d=1;
  58.                 m+=1;
  59.             }else{
  60.                 d=1;
  61.                 m=1;
  62.                 y+=1;
  63.             }
  64.     }
  65.     cout<<count;
  66.         return 0;
  67. }
复制代码


其实题目还简单,就是代码量大,敲着累……不过我认为这段代码非常具有……可以让我好好记录一番的特点。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-3-9 15:26:27 | 显示全部楼层
为了帮助您正确理解和解决代码中的问题,您可以参考以下这段基于您提供代码的描述:

题目分析
  • 给定两个日期,要求查找之间日期是否有回文日期。
  • 回文日期是指日期如20211202,其正读与反读相同。


代码改写建议
为了您可以轻松复制并修改代码,这里对该程序做了一定的调整。此外,请确保您在测试环境中配置了必要的头文件`<string>`和`<algorithm>`:


  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm> // for std::reverse
  4. using namespace std;

  5. int getdays(int y, int m) {
  6.     int a;
  7.     if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
  8.         a = 31;
  9.     } else if (m == 4 || m == 6 || m == 9 || m == 11) {
  10.         a = 30;
  11.     } else { // m == 2
  12.         if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
  13.             a = 29;
  14.         else
  15.             a = 28;
  16.     }
  17.     return a;
  18. }

  19. bool ishuiwen(int x) {
  20.     string s = to_string(x);
  21.     string sb = s;
  22.     reverse(s.begin(), s.end());
  23.     return sb == s;
  24. }

  25. int main() {
  26.     int date1, date2, y, m, d, count = 0;
  27.     cin >> date1 >> date2;
  28.     y = date1 / 10000;
  29.     m = (date1 % 10000) / 100;
  30.     d = date1 % 100;
  31.     while (y * 10000 + m * 100 + d <= date2) {
  32.         int currentDate = y * 10000 + m * 100 + d;
  33.         if (ishuiwen(currentDate)) {
  34.             count++;
  35.             cout << currentDate << " is a huiwen date." << endl;
  36.         }
  37.         // increment date
  38.         d++;
  39.         if (d > getdays(y, m)) {
  40.             d = 1;
  41.             m++;
  42.             if (m > 12) {
  43.                 m = 1;
  44.                 y++;
  45.             }
  46.         }
  47.     }
  48.     cout << "Total huiwen dates: " << count << endl;
  49. }
复制代码


请确保在输入日期时用符合格式的整数形式,例如:20210101。您可以通过增加调试信息(如输出每次循环的日期)来进一步验证程序的正确性。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表