原题描述:
给定炸弹放置的起始时间,和定时天数,输出炸弹的爆炸时间。
我自创的代码如下:
#include<stdio.h>
int *o,*p,*q;
int runyear(int y)
{
if(y%10==0)
{
if(y%400==0)
{
return 1;
}
else return 0;
}
else
{
if(y%4==0&&y%100!=0)
{
return 1;
}
else return 0;
}
}
int runmonth(int y,int m)
{
int s;
if(runyear(y))
{
if(m<=7)
{
if(m==2) s=29;
else if(m%2!=0) s=31;
else s=30;
}
else if(m>7)
{
if(m%2==0) s=31;
else s=30;
}
}
else if(!runyear(y))
{
if(m<=7)
{
if(m==2) s=28;
else if(m%2!=0) s=31;
else s=30;
}
else if(m>7)
{
if(m%2==0) s=31;
else s=30;
}
}
return s;
}
int zadan(int y,int m,int d,int b)
{
int i;
for(i=1;i<=b;i++)
{
d++;
if(d>runmonth(y,m))
{
d=1;
m++;
if(m>12)
{
m=1;
y++;
}
}
}
o=&y;p=&m;q=&d;
if(m>=10)
{
if(d>=10)
{
printf("%d年%d月%d日 ",y,m,d);
}
else
{
printf("%d年%d月0%d日 ",y,m,d);
}
}
else
{
if(d>=10)
{
printf("%d年0%d月%d日 ",y,m,d);
}
else
{
printf("%d年0%d月0%d日 ",y,m,d);
}
}
}
int xinqi(int y,int m,int d)
{
int y0,m0,d0,xq=4;
y0=1998;m0=1;d0=1;
while(1)
{
d0++;
xq++;
if(xq>7)
{
xq=1;
}
if(d0>runmonth(y0,m0))
{
d0=1;
m0++;
if(m0>12)
{
m0=1;
y0++;
}
}
if(y0==y&&m0==m)
{
if(d0==d)
{
if(xq==1)
{
printf("星期一\n");
}
else if(xq==2)
{
printf("星期二\n");
}
else if(xq==3)
{
printf("星期三\n");
}
else if(xq==4)
{
printf("星期四\n");
}
else if(xq==5)
{
printf("星期五\n");
}
else if(xq==6)
{
printf("星期六\n");
}
else if(xq==7)
{
printf("星期日\n");
}
break;
}
}
}
}
main()
{
char a[100][100];int n,b[100],y[100],m[100],d[100],i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d",a[i],&b[i]);
}
for(i=0;i<n;i++)
{
y[i]=(a[i][0]-'0')*1000+(a[i][1]-'0')*100+(a[i][2]-'0')*10+(a[i][3]-'0');
if(a[i][6]=='-')
{
m[i]=(a[i][5]-'0');
if(a[i][8]=='\0')
{
d[i]=(a[i][7]-'0');
}
else
{
d[i]=(a[i][7]-'0')*10+(a[i][8]-'0');
}
}
else
{
m[i]=(a[i][5]-'0')*10+(a[i][6]-'0');
if(a[i][9]=='\0')
{
d[i]=(a[i][8]-'0');
}
else
{
d[i]=(a[i][8]-'0')*10+(a[i][9]-'0');
}
}
}
for(i=0;i<n;i++)
{
zadan(y[i],m[i],d[i],b[i]);
xinqi(*o,*p,*q);
}
}
还是需要用到一个前提:1998年1月1日是星期四,这很重要,然后注意主题思想就是区分闰年和闰月。