Problem Description
输入一个用年月日表示的日期,求该日期是该年的第几天。输入某年的第几天,输出这一天是该年的几月几号,茂茂解不出,需要你的帮助。
Input
开始有个整数k,表示询问的种类,如果k=1,后面有三个合法的整数a,b,c,表示输入的年月日,此时输出该日期是该年的第几天;如果k=2,后面有两个合法的整数a,b,求a年的第b天的日期。保证所有的输入合法。
Output
对于询问1,输出一个整数表示是该年的第几天。 对于询问2,输出年月月,格式为****/**/** 如2013/09/07
Sample Input
2 2013 70
1 2013 3 1
1 2000 3 1
Sample Output
2013/03/11
60
61 我的代码:
#include <stdio.h> int main()
{
struct mydata
{
int year;
int month;
int day;
} date;
int days,month[]={,,,,,,,,,,,,};
int dyas[]={,,,,,,,,,,,,};
int dyas1[]={,,,,,,,,,,,,};
int sw,yera,dya,mon=-,d,i;
while(scanf("%d",&sw)!= EOF)
{
if(==sw)
{
days=;
scanf("%d%d%d",&date.year,&date.month,&date.day);
int i;
for(i=;i<date.month;i++)
days+=month[i];
days+=date.day;
if((date.year%==&&date.year%!=)||(date.year%==))
if(date.month>=)
days++;
printf("%d\n",days);
}
if(==sw)
{ scanf("%d%d",&yera,&dya);
if((yera%==&&yera%!=)||(yera%==))
{
for(i=;i<;i++)
{
if(dyas[i]>dya)
{
mon=i;
d=dya-dyas[i-];
break;
}
else if(dyas[i]==dya)
{
mon=i;
d=month[i];
if(mon==)
d++;
break;
}
}
}
else
{
for(i=;i<;i++)
{
if(dyas1[i]>dya)
{
mon=i;
d=dya-dyas1[i-];
break;
}
else if(dyas1[i]==dya)
{
mon=i;
d=month[i];
break;
}
} }
printf("%04d/%02d/%02d\n",yera,mon,d);
} } return ;
}
其他代码:
#include <iostream> using namespace std;
int isRN(int y)
{
if((y%==&&y%!=)||y%==)
{
return ;
}
return ;
}
int a[][]={{,,,,,,,,,,,,},{,,,,,,,,,,,,}};
int main()
{
int n;
int y,m,d;
int s;
int flag;
while(cin>>n)
{ s=;
if(n==)
{
cin>>y>>m>>d;
flag=isRN(y);
for(int i=;i<m;++i)
{
s+=a[flag][i];
}
s+=d;
cout<<s<<endl;
}
else if(n==)
{
cin>>y>>s;
flag=isRN(y);
m=;
do{
s-=a[flag][++m];
}while(s>);
d = s+a[flag][m];
if(m>=)
{
cout<<y<<"/"<<m<<"/"<<d<<endl;
}
else
{
cout<<y<<"/0"<<m<<"/"<<d<<endl; } } }
return ;
}