算法
#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;
}
//我不行了。。。。。。。 打的我想拉稀{:10_269:} 让你判断回文年,你去判断闰年干哈? 因为2月哪个天数不一样啊,防止越界 风过无痕1989 发表于 2020-12-10 15:42
让你判断回文年,你去判断闰年干哈?
大佬,帮我看看,我快不行了,真的无语了,我感觉我这个逻辑上没毛病,就是打印不出结果 风过无痕1989 发表于 2020-12-10 15:42
让你判断回文年,你去判断闰年干哈?
大佬,神兵天降,您真是及时雨啊,哈哈哈哈哈哈哈哈 严凯 发表于 2020-12-10 15:46
大佬,神兵天降,您真是及时雨啊,哈哈哈哈哈哈哈哈
我没有时间帮你写哟,刚才回完的帖子,就有事离开了
我提醒你一下,今年之前的不必去算的话,日期最大也就是29号,回过来就是9200年,好像题目也没要求你算到那里去,题目在说百年一遇,所以,日期定到21、22、23号足够了,这也就跟闰年不闰年,一点关系都没有了 #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-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;
}
jitianmoshen 发表于 2020-12-10 17:35
#include <stdbool.h>这个我打不开,他说无法打开这个文件
风过无痕1989 发表于 2020-12-10 17:22
我没有时间帮你写哟,刚才回完的帖子,就有事离开了
我提醒你一下,今年之前的不必去算的话,日期最大也 ...
今天没时间了,只有明天想了,唉 本帖最后由 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;
} jitianmoshen 发表于 2020-12-11 05:06
不支持C99的编辑器趁早放弃了, 感觉你每天都有问题啊
我们手里面都没有编译器,我这个编译器还是老师发给我们的。这个就vc++2010学习版。 我前面说你这题的答案有错,是因为两个原因:
1、答案只给了两个输出,而实际有 13 个输出;
2、若题目非要的类型是 ABABBABA型日期,刚答案的第一个输出就不符合 ABABBABA,而是 ABACCABA
2021 1202 21 211212
ABACCABA ABABBABA 风过无痕1989 发表于 2020-12-11 18:50
我前面说你这题的答案有错,是因为两个原因:
1、答案只给了两个输出,而实际有 13 个输出;
2、若题目非 ...
题目要求输出两个,一个是ABCDDCBA,一个是ABABBABA jitianmoshen 发表于 2020-12-11 18:57
题目要求输出两个,一个是ABCDDCBA,一个是ABABBABA
那我的程序只要加一个变量 k 即可 风过无痕1989 发表于 2020-12-11 19:14
那我的程序只要加一个变量 k 即可
92200229 风过无痕1989 发表于 2020-12-11 19:14
那我的程序只要加一个变量 k 即可
你的限制放开到99999999,程序可以算出像54211245,23211232这样的 jitianmoshen 发表于 2020-12-11 19:30
你的限制放开到99999999,程序可以算出像54211245,23211232这样的
是的,很多,昨天我输出了几十个,然后才加条件限制的
页:
[1]