严凯 发表于 2020-12-10 14:44:09

算法

#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=((year%400==0)||(year%4==0&&year%100!=0))?29:28;
                while(month<=12)
                {
                        while(day<=days)
                        {
                                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-10 14:44:50

打的我想拉稀{:10_269:}

风过无痕1989 发表于 2020-12-10 15:42:16

让你判断回文年,你去判断闰年干哈?

严凯 发表于 2020-12-10 15:45:26

因为2月哪个天数不一样啊,防止越界

严凯 发表于 2020-12-10 15:46:03

风过无痕1989 发表于 2020-12-10 15:42
让你判断回文年,你去判断闰年干哈?

大佬,帮我看看,我快不行了,真的无语了,我感觉我这个逻辑上没毛病,就是打印不出结果

严凯 发表于 2020-12-10 15:46:35

风过无痕1989 发表于 2020-12-10 15:42
让你判断回文年,你去判断闰年干哈?

大佬,神兵天降,您真是及时雨啊,哈哈哈哈哈哈哈哈

风过无痕1989 发表于 2020-12-10 17:22:09

严凯 发表于 2020-12-10 15:46
大佬,神兵天降,您真是及时雨啊,哈哈哈哈哈哈哈哈

我没有时间帮你写哟,刚才回完的帖子,就有事离开了
我提醒你一下,今年之前的不必去算的话,日期最大也就是29号,回过来就是9200年,好像题目也没要求你算到那里去,题目在说百年一遇,所以,日期定到21、22、23号足够了,这也就跟闰年不闰年,一点关系都没有了

jitianmoshen 发表于 2020-12-10 17:35:11

#include <stdio.h>
#include <stdbool.h>
bool data_num(int num);
bool abcddcba(int num);
bool ababbaba(int num);
bool runnian(int num);
int main(void)
{
    int num,i, f1 = 0, f2 = 0;
    printf("请输入一个日期:");
    scanf("%d",&num);
    for (i = num;;i++)
    {
      if (abcddcba(i))
      {
            if (data_num(i) && f1 == 0)
            {
                printf("下一个回文日期是%d\n",i);
                f1 = 1;
            }
      }
      if (ababbaba(i))
      {
            if (data_num(i))
            {
                printf("下一个ABABBABA型回文日期是%d\n",i);
                f2 = 1;
            }
      }
      if (f1 && f2)
            break;
    }
    return 0;
}
bool data_num(int num)
{
    //12345678
    int year,month,day;
    int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
    year = num / 10000;
    month = num % 10000 / 100;
    day = num % 100;
    days=(runnian(year))?29:28;
    if (month > 0 && month <= 12)
    {
      return(day > 0 && (day <= days));
    }
    else
      return false;
}
bool runnian(int num)
{
    return((num % 400 == 0)||(num % 4 == 0 && num % 100 != 0));
}
bool abcddcba(int num)
{
    // 12345678
    //a1 b1 c1 d1 d2 c2 b2 a2
    int a1,b1,c1,d1,d2,c2,b2,a2;
    a1 = num / 10000000;
    b1 = num / 1000000 % 10;
    c1 = num / 100000 % 10;
    d1 = num / 10000 % 10;
    d2 = num / 1000 % 10;
    c2 = num / 100 % 10;
    b2 = num / 10 % 10;
    a2 = num % 10;
    return (a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2);
}
bool ababbaba(int num)
{
    //12122121
    //abcdefgh
    int a,b,c,d,e,f,g,h;
    a = num / 10000000;
    b = num / 1000000 % 10;
    c = num / 100000 % 10;
    d = num / 10000 % 10;
    e = num / 1000 % 10;
    f = num / 100 % 10;
    g = num / 10 % 10;
    h = num % 10;
    return((a == c && c == f && f == h) && (b == d && d == e && e == g));
}

风过无痕1989 发表于 2020-12-10 19:51:54

本帖最后由 风过无痕1989 于 2020-12-11 19:13 编辑


#include <stdio.h>

int main()
{
        int i, k = 1, n, m0, m1, m2, m3, m4, m5, m6, m7;
        scanf_s("%d", &n);
        printf("\n");
        for (i = n + 1;i < 21211213;i++)
        {
                m0 = i / 10000000;
                m1 = (i - 10000000 * m0) / 1000000;
                m2 = (i - 10000000 * m0 - 1000000 * m1) / 100000;
                m3 = (i - 10000000 * m0 - 1000000 * m1 - 100000 * m2) / 10000;
                m4 = (i - 10000000 * m0 - 1000000 * m1 - 100000 * m2 - 10000 * m3) / 1000;
                m5 = (i - 10000000 * m0 - 1000000 * m1 - 100000 * m2 - 10000 * m3 - 1000 * m4) / 100;
                m6 = (i - 10000000 * m0 - 1000000 * m1 - 100000 * m2 - 10000 * m3 - 1000 * m4 - 100 * m5) / 10;
                m7 = i % 10;
                if ((m4 == 0 && (m5 > 0 && m5 <= 9)) || (m4 == 1 && m5 <= 2))
                {
                        if (m0 == m7 && m1 == m6 && m2 == m5 && m3 == m4 && k == 1)// 只输出第一个回文年日期
                        {
                                printf("%d%d%d%d%d%d%d%d\n", m0, m1, m2, m3, m4, m5, m6, m7);
                                k++;// 后面的回文年日期不输出
                        }
                        if (m0 == m7 && m1 == m6 && m2 == m5 && m3 == m4 && m0 == m2 && m1 == m3 && m0 != m1)
                        {
                                printf("%d%d%d%d%d%d%d%d\n", m0, m1, m2, m3, m4, m5, m6, m7);// 输出 ABABBABA 型回文年日期
                        }
                }
        }
        printf("\n");
        return 0;
}


严凯 发表于 2020-12-10 20:59:21

jitianmoshen 发表于 2020-12-10 17:35


#include <stdbool.h>这个我打不开,他说无法打开这个文件

严凯 发表于 2020-12-10 21:02:48

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

今天没时间了,只有明天想了,唉

jitianmoshen 发表于 2020-12-11 05:06:43

本帖最后由 jitianmoshen 于 2020-12-11 19:15 编辑

严凯 发表于 2020-12-10 20:59
#include 这个我打不开,他说无法打开这个文件

不支持C99的编辑器趁早放弃了, 感觉你每天都有问题啊
#include <stdio.h>
//#include <stdbool.h>
int data_num(int num);
int abcddcba(int num);
int ababbaba(int num);
int runnian(int num);
int main(void)
{
    int num,i, f1 = 0, f2 = 0;
    printf("请输入一个日期:");
    scanf("%d",&num);
    for (i = num + 1;i < 100000000;i++)
    {
      if (abcddcba(i) == 1)
      {
            if (data_num(i) == 1 && f1 == 0)
            {
                printf("下一个回文日期是%08d\n",i);      //差点忘了年份前面可能有0
                f1 = 1;
            }
      }
      if (ababbaba(i) == 1)
      {
            if (data_num(i) == 1)
            {
                printf("下一个ABABBABA型回文日期是%08d\n",i);    //差点忘了年份前面可能有0
                f2 = 1;
            }
      }
      if (f1 && f2)
            break;
    }
    return 0;
}
int data_num(int num)
{
    int year,month,day;
    int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
    year = num / 10000;
    month = num % 10000 / 100;
    day = num % 100;
    days=(runnian(year))?29:28;
    if (month > 0 && month <= 12)
    {
      if (day > 0 && (day <= days))
            return 1;
      else
            return 0;
    }
    else
      return 0;
}
int runnian(int num)
{
    if ((num % 400 == 0)||(num % 4 == 0 && num % 100 != 0))
      return 1;
    else
      return 0;
}
int abcddcba(int num)
{
    int a1,b1,c1,d1,d2,c2,b2,a2;
    a1 = num / 10000000;
    b1 = num / 1000000 % 10;
    c1 = num / 100000 % 10;
    d1 = num / 10000 % 10;
    d2 = num / 1000 % 10;
    c2 = num / 100 % 10;
    b2 = num / 10 % 10;
    a2 = num % 10;
    if (a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2)
      return 1;
    else
      return 0;
}
int ababbaba(int num)
{
    int a,b,c,d,e,f,g,h;
    a = num / 10000000;
    b = num / 1000000 % 10;
    c = num / 100000 % 10;
    d = num / 10000 % 10;
    e = num / 1000 % 10;
    f = num / 100 % 10;
    g = num / 10 % 10;
    h = num % 10;
    if((a == c && c == f && f == h) && (b == d && d == e && e == g))
      return 1;
    else
      return 0;
}

严凯 发表于 2020-12-11 18:50:12

jitianmoshen 发表于 2020-12-11 05:06
不支持C99的编辑器趁早放弃了, 感觉你每天都有问题啊

我们手里面都没有编译器,我这个编译器还是老师发给我们的。这个就vc++2010学习版。

风过无痕1989 发表于 2020-12-11 18:50:40

我前面说你这题的答案有错,是因为两个原因:
1、答案只给了两个输出,而实际有 13 个输出;
2、若题目非要的类型是 ABABBABA型日期,刚答案的第一个输出就不符合 ABABBABA,而是 ABACCABA
2021   1202               21   211212
ABACCABA               ABABBABA

jitianmoshen 发表于 2020-12-11 18:57:40

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

题目要求输出两个,一个是ABCDDCBA,一个是ABABBABA

风过无痕1989 发表于 2020-12-11 19:14:59

jitianmoshen 发表于 2020-12-11 18:57
题目要求输出两个,一个是ABCDDCBA,一个是ABABBABA

那我的程序只要加一个变量 k 即可

jitianmoshen 发表于 2020-12-11 19:18:41

风过无痕1989 发表于 2020-12-11 19:14
那我的程序只要加一个变量 k 即可

92200229

jitianmoshen 发表于 2020-12-11 19:30:19

风过无痕1989 发表于 2020-12-11 19:14
那我的程序只要加一个变量 k 即可

你的限制放开到99999999,程序可以算出像54211245,23211232这样的

风过无痕1989 发表于 2020-12-11 19:36:16

jitianmoshen 发表于 2020-12-11 19:30
你的限制放开到99999999,程序可以算出像54211245,23211232这样的

是的,很多,昨天我输出了几十个,然后才加条件限制的
页: [1]
查看完整版本: 算法