判断对称日
本题不用考虑是否闰年即二月28还是29天,这对本题无影响(因为如果是29日,对称日的年份应该是92**年,超出了题目的3000年),那么可以分成三类,1个月31天的,1个月30天的,和1个月28天的。然后对年份进行依次循环,在依次判断这一年的1到12月天数,最后判断月数和天数的对称组合数是否和年份相同,输出即可。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
long int A[1000]={0},B[1000]={0},C,D,E,sum=0,real=0,A1;
for(int q=1000;q<=3000;q++)
{
for(int w=1;w<=12;w++)
{
if(w==1||w==3||w==5||w==7||w==8||w==10||w==12)
{
for(int e=1;e<=31;e++)
{
A1=q*10000;
if(w<10)
A1=A1+w*100;
if(w>=10)
A1=A1+w*100;
A1=A1+e;
C=A1;
for(int o=1;;o++)
{
A[o]=C%10;
C=C/10;
D=o;
if(C==0)
break;
}
E=D;
for(int o=1;o<=D;o++)
{
for(int t=(E-o);t>0;t--)
{
A[o]=A[o]*10;
}
real=real+A[o];
}
if(real==A1)
{
sum=sum+1;
printf("%dn",A1);
}
real=0;
}
}
else
{ int z=30;
if(q%4!=0&&w==2)
z=28;
for(int e=1;e<=z;e++)
{
A1=q*10000;
if(w<10)
A1=A1+w*100;
if(w>=10)
A1=A1+w*100;
A1=A1+e;
C=A1;
for(int o=1;;o++)
{
A[o]=C%10;
C=C/10;
D=o;
if(C==0)
break;
}
E=D;
for(int o=1;o<=D;o++)
{
for(int t=(E-o);t>0;t--)
{
A[o]=A[o]*10;
}
real=real+A[o];
}
if(real==A1)
{
sum=sum+1;
printf("%dn",A1);
}
real=0;
}
}
}
}
printf("一共有%d次世界完全对称日",sum);
return 0;
}