鱼C论坛

 找回密码
 立即注册
查看: 1165|回复: 18

[已解决]算法

[复制链接]
发表于 2020-12-10 14:44:09 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
int main()
{
        int n,day1,day2,month1,month2,year1,year2,year3,year4,temp,y,k;
        scanf("%d",&n);
        int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
        int year,month,day;
        day=n%100;
        //day++;
        n=n/100;
        month=n%100;
        n=n/100;
        year=n;
        while(1)
        {
                days[1]=((year%400==0)||(year%4==0&&year%100!=0))?29:28;
                while(month<=12)
                {
                        while(day<=days[month-1])
                        {
                                temp=year;
                                day1=day%10;
                                day2=day/10;
                                month1=month%10;
                                month2=month/10;
                                year1=year%10;
                                year=year/10;
                                year2=year%10;
                                year=year/10;
                                year3=year%10;
                                year=year/10;
                                year4=year;
                                if((temp*10000+month*100+day)==(day1*10000000)+(day2*1000000)+(month1*100000)+(month2*10000)+(year1*1000)+(year2*100)+(year3*10)+year4)
                                        y=temp*10000+month*100+day;
                                year=temp;
                                if((year==(day1*1000)+(day2*100)+(month1*10)+(month2)))
                                {
                                        k=year*10000+month*100+day;
                                        goto A;
                                }
                        }
                        day=1;
                        month++;
                }
                month=1;
                year++;
        }
A:printf("%d\n",y);
        printf("%d\n",k);
        return 0;
}




//我不行了。。。。。。。
最佳答案
2020-12-11 05:06:43
本帖最后由 jitianmoshen 于 2020-12-11 19:15 编辑
严凯 发表于 2020-12-10 20:59
#include 这个我打不开,他说无法打开这个文件


不支持C99的编辑器趁早放弃了, 感觉你每天都有问题啊
  1. #include <stdio.h>
  2. //#include <stdbool.h>
  3. int data_num(int num);
  4. int abcddcba(int num);
  5. int ababbaba(int num);
  6. int runnian(int num);
  7. int main(void)
  8. {
  9.     int num,i, f1 = 0, f2 = 0;
  10.     printf("请输入一个日期:");
  11.     scanf("%d",&num);
  12.     for (i = num + 1;i < 100000000;i++)
  13.     {
  14.         if (abcddcba(i) == 1)
  15.         {
  16.             if (data_num(i) == 1 && f1 == 0)
  17.             {
  18.                 printf("下一个回文日期是%08d\n",i);      //[b]差点忘了年份前面可能有0[/b]
  19.                 f1 = 1;
  20.             }
  21.         }
  22.         if (ababbaba(i) == 1)
  23.         {
  24.             if (data_num(i) == 1)
  25.             {
  26.                 printf("下一个ABABBABA型回文日期是%08d\n",i);    //[b]差点忘了年份前面可能有0[/b]
  27.                 f2 = 1;
  28.             }
  29.         }
  30.         if (f1 && f2)
  31.             break;
  32.     }
  33.     return 0;
  34. }
  35. int data_num(int num)
  36. {
  37.     int year,month,day;
  38.     int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
  39.     year = num / 10000;
  40.     month = num % 10000 / 100;
  41.     day = num % 100;
  42.     days[1]=(runnian(year))?29:28;
  43.     if (month > 0 && month <= 12)
  44.     {
  45.         if (day > 0 && (day <= days[month - 1]))
  46.             return 1;
  47.         else
  48.             return 0;
  49.     }
  50.     else
  51.         return 0;
  52. }
  53. int runnian(int num)
  54. {
  55.     if ((num % 400 == 0)||(num % 4 == 0 && num % 100 != 0))
  56.         return 1;
  57.     else
  58.         return 0;
  59. }
  60. int abcddcba(int num)
  61. {
  62.     int a1,b1,c1,d1,d2,c2,b2,a2;
  63.     a1 = num / 10000000;
  64.     b1 = num / 1000000 % 10;
  65.     c1 = num / 100000 % 10;
  66.     d1 = num / 10000 % 10;
  67.     d2 = num / 1000 % 10;
  68.     c2 = num / 100 % 10;
  69.     b2 = num / 10 % 10;
  70.     a2 = num % 10;
  71.     if (a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2)
  72.         return 1;
  73.     else
  74.         return 0;
  75. }
  76. int ababbaba(int num)
  77. {
  78.     int a,b,c,d,e,f,g,h;
  79.     a = num / 10000000;
  80.     b = num / 1000000 % 10;
  81.     c = num / 100000 % 10;
  82.     d = num / 10000 % 10;
  83.     e = num / 1000 % 10;
  84.     f = num / 100 % 10;
  85.     g = num / 10 % 10;
  86.     h = num % 10;
  87.     if  ((a == c && c == f && f == h) && (b == d && d == e && e == g))
  88.         return 1;
  89.     else
  90.         return 0;
  91. }
复制代码
20201018162905412.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-10 14:44:50 | 显示全部楼层
打的我想拉稀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 15:42:16 | 显示全部楼层
让你判断回文年,你去判断闰年干哈?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 15:45:26 | 显示全部楼层
因为2月哪个天数不一样啊,防止越界
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 15:46:03 | 显示全部楼层
风过无痕1989 发表于 2020-12-10 15:42
让你判断回文年,你去判断闰年干哈?

大佬,帮我看看,我快不行了,真的无语了,我感觉我这个逻辑上没毛病,就是打印不出结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 15:46:35 | 显示全部楼层
风过无痕1989 发表于 2020-12-10 15:42
让你判断回文年,你去判断闰年干哈?

大佬,神兵天降,您真是及时雨啊,哈哈哈哈哈哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 17:22:09 | 显示全部楼层
严凯 发表于 2020-12-10 15:46
大佬,神兵天降,您真是及时雨啊,哈哈哈哈哈哈哈哈

我没有时间帮你写哟,刚才回完的帖子,就有事离开了
我提醒你一下,今年之前的不必去算的话,日期最大也就是29号,回过来就是9200年,好像题目也没要求你算到那里去,题目在说百年一遇,所以,日期定到21、22、23号足够了,这也就跟闰年不闰年,一点关系都没有了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 17:35:11 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. bool data_num(int num);
  4. bool abcddcba(int num);
  5. bool ababbaba(int num);
  6. bool runnian(int num);
  7. int main(void)
  8. {
  9.     int num,i, f1 = 0, f2 = 0;
  10.     printf("请输入一个日期:");
  11.     scanf("%d",&num);
  12.     for (i = num;;i++)
  13.     {
  14.         if (abcddcba(i))
  15.         {
  16.             if (data_num(i) && f1 == 0)
  17.             {
  18.                 printf("下一个回文日期是%d\n",i);
  19.                 f1 = 1;
  20.             }
  21.         }
  22.         if (ababbaba(i))
  23.         {
  24.             if (data_num(i))
  25.             {
  26.                 printf("下一个ABABBABA型回文日期是%d\n",i);
  27.                 f2 = 1;
  28.             }
  29.         }
  30.         if (f1 && f2)
  31.             break;
  32.     }
  33.     return 0;
  34. }
  35. bool data_num(int num)
  36. {
  37.     //12345678
  38.     int year,month,day;
  39.     int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
  40.     year = num / 10000;
  41.     month = num % 10000 / 100;
  42.     day = num % 100;
  43.     days[1]=(runnian(year))?29:28;
  44.     if (month > 0 && month <= 12)
  45.     {
  46.         return  (day > 0 && (day <= days[month - 1]));
  47.     }
  48.     else
  49.         return false;
  50. }
  51. bool runnian(int num)
  52. {
  53.     return  ((num % 400 == 0)||(num % 4 == 0 && num % 100 != 0));
  54. }
  55. bool abcddcba(int num)
  56. {
  57.     // 1  2  3  4  5  6  7  8
  58.     //a1 b1 c1 d1 d2 c2 b2 a2
  59.     int a1,b1,c1,d1,d2,c2,b2,a2;
  60.     a1 = num / 10000000;
  61.     b1 = num / 1000000 % 10;
  62.     c1 = num / 100000 % 10;
  63.     d1 = num / 10000 % 10;
  64.     d2 = num / 1000 % 10;
  65.     c2 = num / 100 % 10;
  66.     b2 = num / 10 % 10;
  67.     a2 = num % 10;
  68.     return (a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2);
  69. }
  70. bool ababbaba(int num)
  71. {
  72.     //12122121
  73.     //abcdefgh
  74.     int a,b,c,d,e,f,g,h;
  75.     a = num / 10000000;
  76.     b = num / 1000000 % 10;
  77.     c = num / 100000 % 10;
  78.     d = num / 10000 % 10;
  79.     e = num / 1000 % 10;
  80.     f = num / 100 % 10;
  81.     g = num / 10 % 10;
  82.     h = num % 10;
  83.     return  ((a == c && c == f && f == h) && (b == d && d == e && e == g));
  84. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 19:51:54 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-12-11 19:13 编辑

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int i, k = 1, n, m0, m1, m2, m3, m4, m5, m6, m7;
  5.         scanf_s("%d", &n);
  6.         printf("\n");
  7.         for (i = n + 1;i < 21211213;i++)
  8.         {
  9.                 m0 = i / 10000000;
  10.                 m1 = (i - 10000000 * m0) / 1000000;
  11.                 m2 = (i - 10000000 * m0 - 1000000 * m1) / 100000;
  12.                 m3 = (i - 10000000 * m0 - 1000000 * m1 - 100000 * m2) / 10000;
  13.                 m4 = (i - 10000000 * m0 - 1000000 * m1 - 100000 * m2 - 10000 * m3) / 1000;
  14.                 m5 = (i - 10000000 * m0 - 1000000 * m1 - 100000 * m2 - 10000 * m3 - 1000 * m4) / 100;
  15.                 m6 = (i - 10000000 * m0 - 1000000 * m1 - 100000 * m2 - 10000 * m3 - 1000 * m4 - 100 * m5) / 10;
  16.                 m7 = i % 10;
  17.                 if ((m4 == 0 && (m5 > 0 && m5 <= 9)) || (m4 == 1 && m5 <= 2))
  18.                 {
  19.                         if (m0 == m7 && m1 == m6 && m2 == m5 && m3 == m4 && k == 1)  // 只输出第一个回文年日期
  20.                         {
  21.                                 printf("%d%d%d%d%d%d%d%d\n", m0, m1, m2, m3, m4, m5, m6, m7);
  22.                                 k++;  // 后面的回文年日期不输出
  23.                         }
  24.                         if (m0 == m7 && m1 == m6 && m2 == m5 && m3 == m4 && m0 == m2 && m1 == m3 && m0 != m1)
  25.                         {
  26.                                 printf("%d%d%d%d%d%d%d%d\n", m0, m1, m2, m3, m4, m5, m6, m7);  // 输出 ABABBABA 型回文年日期
  27.                         }
  28.                 }
  29.         }
  30.         printf("\n");
  31.         return 0;
  32. }
复制代码


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

使用道具 举报

 楼主| 发表于 2020-12-10 20:59:21 | 显示全部楼层

#include <stdbool.h>这个我打不开,他说无法打开这个文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 21:02:48 | 显示全部楼层
风过无痕1989 发表于 2020-12-10 17:22
我没有时间帮你写哟,刚才回完的帖子,就有事离开了
我提醒你一下,今年之前的不必去算的话,日期最大也 ...

今天没时间了,只有明天想了,唉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 05:06:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jitianmoshen 于 2020-12-11 19:15 编辑
严凯 发表于 2020-12-10 20:59
#include 这个我打不开,他说无法打开这个文件


不支持C99的编辑器趁早放弃了, 感觉你每天都有问题啊
  1. #include <stdio.h>
  2. //#include <stdbool.h>
  3. int data_num(int num);
  4. int abcddcba(int num);
  5. int ababbaba(int num);
  6. int runnian(int num);
  7. int main(void)
  8. {
  9.     int num,i, f1 = 0, f2 = 0;
  10.     printf("请输入一个日期:");
  11.     scanf("%d",&num);
  12.     for (i = num + 1;i < 100000000;i++)
  13.     {
  14.         if (abcddcba(i) == 1)
  15.         {
  16.             if (data_num(i) == 1 && f1 == 0)
  17.             {
  18.                 printf("下一个回文日期是%08d\n",i);      //[b]差点忘了年份前面可能有0[/b]
  19.                 f1 = 1;
  20.             }
  21.         }
  22.         if (ababbaba(i) == 1)
  23.         {
  24.             if (data_num(i) == 1)
  25.             {
  26.                 printf("下一个ABABBABA型回文日期是%08d\n",i);    //[b]差点忘了年份前面可能有0[/b]
  27.                 f2 = 1;
  28.             }
  29.         }
  30.         if (f1 && f2)
  31.             break;
  32.     }
  33.     return 0;
  34. }
  35. int data_num(int num)
  36. {
  37.     int year,month,day;
  38.     int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
  39.     year = num / 10000;
  40.     month = num % 10000 / 100;
  41.     day = num % 100;
  42.     days[1]=(runnian(year))?29:28;
  43.     if (month > 0 && month <= 12)
  44.     {
  45.         if (day > 0 && (day <= days[month - 1]))
  46.             return 1;
  47.         else
  48.             return 0;
  49.     }
  50.     else
  51.         return 0;
  52. }
  53. int runnian(int num)
  54. {
  55.     if ((num % 400 == 0)||(num % 4 == 0 && num % 100 != 0))
  56.         return 1;
  57.     else
  58.         return 0;
  59. }
  60. int abcddcba(int num)
  61. {
  62.     int a1,b1,c1,d1,d2,c2,b2,a2;
  63.     a1 = num / 10000000;
  64.     b1 = num / 1000000 % 10;
  65.     c1 = num / 100000 % 10;
  66.     d1 = num / 10000 % 10;
  67.     d2 = num / 1000 % 10;
  68.     c2 = num / 100 % 10;
  69.     b2 = num / 10 % 10;
  70.     a2 = num % 10;
  71.     if (a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2)
  72.         return 1;
  73.     else
  74.         return 0;
  75. }
  76. int ababbaba(int num)
  77. {
  78.     int a,b,c,d,e,f,g,h;
  79.     a = num / 10000000;
  80.     b = num / 1000000 % 10;
  81.     c = num / 100000 % 10;
  82.     d = num / 10000 % 10;
  83.     e = num / 1000 % 10;
  84.     f = num / 100 % 10;
  85.     g = num / 10 % 10;
  86.     h = num % 10;
  87.     if  ((a == c && c == f && f == h) && (b == d && d == e && e == g))
  88.         return 1;
  89.     else
  90.         return 0;
  91. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-11 18:50:12 | 显示全部楼层
jitianmoshen 发表于 2020-12-11 05:06
不支持C99的编辑器趁早放弃了, 感觉你每天都有问题啊

我们手里面都没有编译器,我这个编译器还是老师发给我们的。这个就vc++2010学习版。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 18:50:40 | 显示全部楼层
我前面说你这题的答案有错,是因为两个原因:
1、答案只给了两个输出,而实际有 13 个输出;
2、若题目非要的类型是 ABABBABA  型日期,刚答案的第一个输出就不符合 ABABBABA,而是 ABACCABA
2  0  2  1   1  2  0  2               2  1   2  1  1  2  1  2
A  B  A  C  C  A  B  A               A  B  A  B  B  A  B  A
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 18:57:40 | 显示全部楼层
风过无痕1989 发表于 2020-12-11 18:50
我前面说你这题的答案有错,是因为两个原因:
1、答案只给了两个输出,而实际有 13 个输出;
2、若题目非 ...

题目要求输出两个,一个是ABCDDCBA,一个是ABABBABA
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 19:14:59 | 显示全部楼层
jitianmoshen 发表于 2020-12-11 18:57
题目要求输出两个,一个是ABCDDCBA,一个是ABABBABA

那我的程序只要加一个变量 k 即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 19:18:41 | 显示全部楼层
风过无痕1989 发表于 2020-12-11 19:14
那我的程序只要加一个变量 k 即可

92200229
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 19:30:19 | 显示全部楼层
风过无痕1989 发表于 2020-12-11 19:14
那我的程序只要加一个变量 k 即可

你的限制放开到99999999,程序可以算出像54211245,23211232这样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 19:36:16 | 显示全部楼层
jitianmoshen 发表于 2020-12-11 19:30
你的限制放开到99999999,程序可以算出像54211245,23211232这样的

是的,很多,昨天我输出了几十个,然后才加条件限制的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-8 17:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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