解题思路:
注意事项:
参考代码:
#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;
}
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复