解题思路:

注意事项:

参考代码:

#include<stdio.h>

int A(int x);

int B(int p);

int main()

{

    int N;

    scanf("%d", &N);                                                                  //输入开始日期并拆分为年月日

    int day = (N / 10) % 10 * 10 + N % 10;

    int month = (N / 1000) % 10 * 10 + (N / 100) % 10;

    int year = N / 10000;

    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)   //if语句判断下一天从哪开始

    {

        if (day == 31)

        {

            day = 1;

        }

        else

        {

            day++;

        }

    }

    else if (month == 2)

    {

        if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)

        {

            if (day == 29)

            {

                day = 1;

            }

            else

            {

                day++;

            }

        }

        else

        {

            if (day == 28)

            {

                day = 1;

            }

            else

            {

                day++;

            }

        }

    }

    for (int i = day;; i++)                                                                            //通过找到的下一天开始循环

    {

        int m = year * 10000 + month * 100 + day;                                    //日期的八位整数

        int num1 = A(m);                                                             //调用函数判断是否符合第一个条件

        if (num1 == 0)

        {

            printf("%d\n", m);                                       //符合条件则输出并结束循环

            break;

        }

        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)    //以下通过月份,闰年等条件递增日期

        {

            if (day == 31)

            {

                day = 1;

                if (month == 12)

                {

                    year++;

                    month = 1;

                }

                else

                {

                    month++;

                }

            }

            else

            {

                day++;

            }

        }

        else if (month == 2)

        {

            if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)

            {

                if (day == 29)

                {

                    day = 1;

                    if (month == 12)

                    {

                        year++;

                        month = 1;

                    }

                    else

                    {

                        month++;

                    }

                }

                else

                {

                    day++;

                }

            }

            else

            {

                if (day == 28)

                {

                    day = 1;

                    if (month == 12)

                    {

                        year++;

                        month = 1;

                    }

                    else

                    {

                        month++;

                    }

                }

                else

                {

                    day++;

                }

            }

        }

        else

        {

            if (day == 30)

            {

                day = 1;

                if (month == 12)

                {

                    year++;

                    month = 1;

                }

                else

                {

                    month++;

                }

            }

            else

            {

                day++;

            }

        }

    }

    for (int i = day;; i++)                //再次通过for循环判断第二个条件,这里没有用同一个for循环,是因为要得到的两个日期之间,可能还有符合第一个条件的日期

    {                                                                   //以下作用同第一个for循环

        int m = year * 10000 + month * 100 + day;      //注:这里默认第二个日期是在找到第一个日期之后,因为此时的m是第一个for循环结束后的日期。          

        int num2 = B(m);                                                

        if (num2 == 0)

        {

            printf("%d", m);

            break;

        }

        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)

        {

            if (day == 31)

            {

                day = 1;

                if (month == 12)

                {

                    year++;

                    month = 1;

                }

                else

                {

                    month++;

                }

            }

            else

            {

                day++;

            }

        }

        else if (month == 2)

        {

            if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)

            {

                if (day == 29)

                {

                    day = 1;

                    if (month == 12)

                    {

                        year++;

                        month = 1;

                    }

                    else

                    {

                        month++;

                    }

                }

                else

                {

                    day++;

                }

            }

            else

            {

                if (day == 28)

                {

                    day = 1;

                    if (month == 12)

                    {

                        year++;

                        month = 1;

                    }

                    else

                    {

                        month++;

                    }

                }

                else

                {

                    day++;

                }

            }

        }

        else

        {

            if (day == 30)

            {

                day = 1;

                if (month == 12)

                {

                    year++;

                    month = 1;

                }

                else

                {

                    month++;

                }

            }

            else

            {

                day++;

            }

        }

    }

    return 0;

}

int A(int x)                                       //定义函数判断日期是否符合第一个条件——回文

{

    int y = x;

    int tmp = 0;

    while (x > 0)

    {

        int t = x % 10;

        tmp = tmp * 10 + t;

        x /= 10;

    }

    if (tmp == y)

    {

        return 0;

    }

    else

    {

        return 1;

    }

}

int B(int p)                              //定义第二个函数判断是否为要求的数字模型

{

    if ((p % 10 == (p / 100) % 10) && ((p / 100) % 10 == (p / 100000) % 10) && ((p / 100000) % 10 == p / 10000000) &&((p / 10) % 10 == (p / 1000) % 10) && ((p / 1000) % 10 == (p / 10000) % 10) && ((p / 10000) % 10 == (p / 1000000) % 10))

    {                                                       //笨方法:A=A,B=B

        return 0;

    }

    else

    {

        return 1;

    }

}

点赞(1)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论