您的位置:首页 > 其它

hdu 4515(关于时间的穿越)

2013-06-05 12:07 253 查看
题意:容易理解.

分析:对于这种类型的题目我们以后可以把它当做一种模板题来做,首先我要处理的就是把时间变到从一年的最后一天开始穿越,分为两种情况:一种是往前穿越,另一种是往后穿越,当写代码的时候有些区别需要注意的,具体看代码实现吧!!

代码实现:

#include<stdio.h>
#include<string.h>
int y=2013,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int runnian(int n)//判断是否是闰年
{
if((n%4==0&&n%100!=0)||n%400==0)
return 1;
else
return 0;
}
void nima1(int time)//往前穿越
{
int i,t1,t2,t3,temp;
for(i=y; ;i++)
{
temp=365;
if(runnian(i))
temp++;
if(time<=temp)//发现这里有一个BUG,去掉等号实际上是错误的,可是在杭电上是能够AC的
break;
time=time-temp;
}
t1=i;
a[2]=28;
if(runnian(t1))
a[2]++;
for(i=1;i<=12;i++)
{
if(time<=a[i])
break;
time=time-a[i];
}
t2=i;
t3=time;
printf("%d/%02d/%02d",t1,t2,t3);
}
void nima2(int time)//往后穿越,相对于往前穿越有点麻烦
{
int i,t1,t2,t3,temp;
for(i=y-1;;i--)
{
temp=365;
if(runnian(i))
temp++;
if(time<temp)//这里和往前穿越是不同的
break;
time=time-temp;
}
t1=i;
a[2]=28;
if(runnian(t1))
a[2]++;
for(i=12; ;i--)
{
if(i==0)
i=12;
if(time<a[i])//这里和往前穿越是不同的
break;
time=time-a[i];
}
t2=i;
t3=a[i]-time;
printf("%d/%02d/%02d",t1,t2,t3);
}
int main()
{
int T,time,time1,time2;
while(scanf("%d",&T)!=EOF)
{
while(T--)
{

scanf("%d",&time);
time1=time+83;//首先我要进行变化,我都是变到从2012年12月31号开始穿越
nima1(time1);
printf(" ");
time2=time-83;
if(time2<0)
{
time2=83-time;
nima1(time2);
}
else
nima2(time2);
printf("\n");
}
}
return 0;
}


http://www.hxen.com/CET46/CET4/xiezuo/2011-12-14/163073.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: