129 条题解
-
2猫粮寸断 LV 10 @ 2017-09-19 09:59:38
此题不存在BUG
那些一开始想的百年不闰的,注意一下四百年再闰#include<iostream> int mo[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; using namespace std; int main() { int a,b,c,i; cin>>a>>b>>c; for(i=1;i<=10000;i++) { c++; if(a%4==0&&b==2) { if(c>29) { c=1; b++; } } else if(c>mo[b]) { c=1; b++; if(b>12) { b=1; a++; } } } cout<<a<<"-"<<b<<"-"<<c; return 0; }
-
12017-05-08 12:45:37@
/* 水题直接乱搞不想多说 */ #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int y,m,d; int day[13]; void init() { day[1]=31; day[2]=28; day[3]=31; day[4]=30; day[5]=31; day[6]=30; day[7]=31; day[8]=31; day[9]=30; day[10]=31; day[11]=30; day[12]=31; } int main() { init(); cin>>y>>m>>d; for (int i=1;i<=10000;i++) { if (y%4==0) day[2]=29; else day[2]=28; d++; if (d>day[m]) m++,d=1; if (m==13) m=1,y++; } cout<<y<<"-"<<m<<"-"<<d<<endl; return 0; }
-
02021-03-16 21:00:37@
#include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <vector> #include <deque> using namespace std; namespace dts { int MT0[12]={31,28,31,30,31,30,31,31,30,31,30,31}; #define MT0(x) MT0[(x)-1] int MT1[12]={31,29,31,30,31,30,31,31,30,31,30,31}; #define MT1(x) MT1[(x)-1] class date{ public: int Y,M,D; date nextday() { if (M==12&&D==MT0(12)) { date ans; ans.Y=Y+1,ans.M=1,ans.D=1; return ans; } if ((Y%4==0&&Y%100!=0)||Y%400==0) { if (D==MT1(M)) { date ans; ans.Y=Y,ans.M=M+1,ans.D=1; return ans; } else { date ans; ans.Y=Y,ans.M=M,ans.D=D+1; return ans; } } else { if (D==MT0(M)) { date ans; ans.Y=Y,ans.M=M+1,ans.D=1; return ans; } else { date ans; ans.Y=Y,ans.M=M,ans.D=D+1; return ans; } } } }; date btd,ans; void main() { scanf("%d%d%d",&btd.Y,&btd.M,&btd.D); ans=btd; for (int i=1;i<=10000;i++) ans=ans.nextday(); printf("%d-%d-%d\n",ans.Y,ans.M,ans.D); } }; int main() { dts::main(); }
-
02018-04-18 09:26:04@
#include <iostream>
#include <cstdio>using namespace std;
int y,m,d;
int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int main()
{cin>>y>>m>>d;
for (int i=1;i<=10000;i++)
{
if (y%4==0)
day[2]=29;
else day[2]=28;
d++;
if (d>day[m])
m++,d=1;
if (m==13)
m=1,y++;
}
cout<<y<<"-"<<m<<"-"<<d<<endl;
return 0;
} -
02018-03-20 13:33:43@
#include<iostream>
#include<cmath>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int a,b,c;
cin>>a>>b>>c;
for (int i=1;i<=10000;i++)
{
c++;
if ((a%4==0&&a%100!=0)||a%400==0)
{
m[2]=29;
if (m[b]<c)
{
b++;
c=1;
if (b==13)
{
a++;
b=1;
}
}
m[2]=28;
}
else
{
if (m[b]<c)
{
b++;
c=1;
if (b==13)
{
a++;
b=1;
}
}
}
}
cout<<a<<"-"<<b<<"-"<<c;
return 0;
} -
02018-02-02 10:42:37@
八年以后再来看,用 Python 多简单。
import datetime
data = list(map(int, input().strip().split(' ')))
date = datetime.date(year=data[0], month=data[1], day=data[2])
date += datetime.timedelta(days=10000)
print(date.strftime('%Y-%-m-%-d')) -
02017-08-19 13:53:17@
program huiwen;
var
month, ans, a, b, y, code, d, q, w, e: longint;
str1, str2, stry, strm, strd, year, s, s1, s2: string;begin
readln(q, w, e);
ans := 0;
str(q, stry);
str(w, strm);
if length(strm) = 1 then
begin
strm := '0' + strm[1];
end;
str(e, strd);
if length(strd) = 1 then
begin
strd := '0' + strd[1];
end;
y := 0;
val(stry, y, code);repeat
if (strm = '01') or (strm = '03') or (strm = '05') or (strm = '07') or
(strm = '08') or (strm = '10') or (strm = '12') then
month := 31
else if strm <> '02' then
month := 30
else
beginif ((y mod 4 = 0) and (y mod 100 <> 0)) or (y mod 400 = 0) then
month := 29
else
month := 28;
end;
if strd[1] = '0' then
begin
s := copy(strd, 2, 1);
val(s, d, code);
end
else
val(strd, d, code);
if (strm = '12') and (d = month) then
begin
Inc(y);
strm := '01';
strd := '01';
str(y, stry);
d := 0;
end
else
if (strm = '09') and (d = month) then
begin
strm := '10';
strd := '01';
d := 0;
end
else
if (d = month) then
begin
strm[2] := chr(Ord(strm[2]) + 1);
strd := '01';
d := 0;
end
else
begin
Inc(d);
str(d, strd);
if length(strd) = 1 then
strd := '0' + strd;
end;
Inc(ans);
until ans = 10000;
if strm[1] = '0' then
s1 := copy(strm, 2, 1)
else
s1 := strm;
if strd[1] = '0' then
s2 := copy(strd, 2, 1)
else
s2 := strd;
writeln(stry, '-', s1, '-', s2);
end. -
02017-05-25 17:40:53@
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,y,r,rr,d=10000;
cin>>n>>y>>r;
for(d=10000;d>0;d--)
{r++;
if(n%4!=0)
{switch(y)
{case 2:rr=28;break;
case 4:rr=30;break;
case 6:rr=30;break;
case 9:rr=30;break;
case 11:rr=30;break;
default:rr=31;break;
}
if(r>rr){y++;r=1;}
if(y>12){n++;y=1;}}
else{switch(y)
{case 2:rr=29;break;
case 4:rr=30;break;
case 6:rr=30;break;
case 9:rr=30;break;
case 11:rr=30;break;
default:rr=31;break;
}
if(r>rr){y++;r=1;}
if(y>12){n++;y=1;}}
}
cout<<n<<"-"<<y<<"-"<<r;
return 0;
} -
02017-01-07 14:43:28@
int pd(int x) { if (x % 4 == 0) { if (x % 100 != 0 || x % 400 == 0) return 1; } return 0; } int main () { int i, dtot = 0, y, m, d, dd, k, day[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}, yd[2] = {365, 366}; scanf("%d%d%d", &y, &m, &d); k = pd(y); for (i = 1; i < m; i++) dtot += day[k][i]; dtot += d - 1; dd = 10000; m = 1; d = 1; while (dd >= yd[k]) { dd -= yd[k]; k = pd(++y); } while (dd >= day[k][m]) { dd -= day[k][m]; m++; } d += dd; while (dtot >= day[k][m]) { dtot -= day[k][m]; m++; if (m > 12) { y++; m = 1; k = pd(y); } } while (dtot) { d++; dtot--; if (d > day[k][m]) { m++; d = 1; } if (m > 12) { y++; m = 1; k = pd(y); } } printf("%d-%d-%d", y, m, d); return 0; }```
-
02016-12-21 20:13:21@
哈哈哈哈哈 纯模拟你敢信吗,供参考,代码逻辑清晰的一逼
```c++
#include<cstdio>
#include<cmath>
#include<cstring>
int main()
{
int year,month,day;
int sh[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int th[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
scanf("%d%d%d",&year,&month,&day);
for(int i=1; i <= 10000; i++,day++)
{
// printf("month = %d day = %d\n",month,day);
//是闰年
if(year % 400==0||(year % 4 == 0 && year % 100 != 0))
{if(day+1 > th[month])
{
if(month == 12)
{
year++;
month = 0;
}
month++;
day = 0;
}}
else
{
if(day+1 > sh[month])
{
if(month == 12)
{
year++;
month = 0;
}
month++;
day = 0;
}
}
}
printf("%d-%d-%d\n",year,month,day);return 0;
} -
02016-06-16 19:37:55@
/*注意到数据不大,直接枚举*/
#include <cstdio>
#define Limit 10000
#define MonthCou 12int MonDay[MonthCou] = {31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
bool IsR(){
if((year%4 == 0&&year%100 != 0)||(year%100 == 0&&year%400 == 0)) return true;
else return false;
}void increase(){
if(IsR()) MonDay[1] = 29; //判断闰年
else MonDay[1] = 28; //千万不要忘记复位!
day++;
if(day > MonDay[month-1]){ day = 1; month++; }
//一定要注意月份和天数是从 1 开始的,资深 OIer 可能会写成 0 ,就像我 ......
if(month > MonthCou){ month = 1; year++; }
}int main(){
scanf("%d %d %d",&year,&month,&day);
for(int i = 1; i <= Limit; i++) increase();
printf("%d-%d-%d\n",year,month,day);return 0;
} -
02016-05-25 13:42:45@
var
q:array[1..12] of integer;
a,i,o,p:integer;
begin
read(a,o,p);
q[1]:=31;
q[3]:=31;
q[4]:=30;
q[5]:=31;
q[6]:=30;
q[7]:=31;
q[8]:=31;
q[9]:=30;
q[10]:=31;
q[11]:=30;
q[12]:=31;
for i:=1 to 10000 do
begin
inc(p);
if p >q[o] then begin
inc(o);
p:=1;
if o>12 then begin
inc(a);
o:=1;
end;
if (a mod 4=0) and (a mod 100<>0) or (a mod 400=0) then q[2]:=29
else q[2]:=28;
end;end;
write(a,'-',o,'-',p);
end. -
02016-03-08 20:05:21@
var
yf:array[1..12]of integer;
i,j,k,y,m,d,ay,am,ad:longword;
begin
readln(y,m,d);
yf[1]:=31; yf[3]:=31; yf[4]:=30; yf[5]:=31; yf[6]:=30;
yf[7]:=31; yf[8]:=31; yf[9]:=30; yf[10]:=31; yf[11]:=30; yf[12]:=31;
for i:=1 to 10000 do
begin
inc(d);
if d>yf[m] then
begin
inc(m);
d:=1;
end;
if m>12 then
begin
inc(y);
m:=1;
end;
if (y mod 4=0)and(y mod 100<>0)or(y mod 400=0) then
yf[2]:=29 else yf[2]:=28;
end;
writeln(y,'-',m,'-',d);
end. -
02016-02-12 20:47:12@
我去坑爹啊,测试数据不用补0,害我20分还以为什么
Pascal AC
var n,y,m,d,i,k:longint;
a:array[1..12]of longint=(31,28,31,30,31,30,31,31,30,31,30,31);
begin
read(y,m,d);
n:=10000;
if (y mod 4=0)and(y mod 100<>0)or(y mod 400=0) then a[2]:=29;
for i:=1 to m-1 do
n:=n+a[i];
m:=1;
n:=n+d-1;
d:=1;
while n>364 do
begin
if (y mod 4=0)and(y mod 100<>0)or(y mod 400=0) then
begin
if n-366>=0 then begin
n:=n-366;
inc(y);
end
else break;
end
else begin
n:=n-365;
inc(y);
end;
end;
a[2]:=28;
if (y mod 4=0)and(y mod 100<>0)or(y mod 400=0) then a[2]:=29;
for i:=1 to 12 do
if n-a[i]>=0 then
begin
n:=n-a[i];
inc(m);
end;
d:=d+n;
write(y,'-',m,'-',d);
end. -
02016-02-01 10:09:04@
本来,闰年是一个很复杂的东西,但是由于这题的year可以被控制在1949<=year<=2099,所以,没必要考虑别的,直接用year对4取模,结果是0就是闰年,否则就不是
#include<iostream>
using namespace std;
int main()
{
int y,m,d,day[13];
cin>>y>>m>>d;
day[1]=31;
day[2]=28;
day[3]=31;
day[4]=30;
day[5]=31;
day[6]=30;
day[7]=31;
day[8]=31;
day[9]=30;
day[10]=31;
day[11]=30;
day[12]=31;
for (int i=1;i<=10000;i++)
{
if (y%4==0)
day[2]=29;
else day[2]=28;
d++;
if (d>day[m])
{
m++;
d=1;
}
if (m==13)
{
m=1;
y++;
}
}
cout<<y<<"-"<<m<<"-"<<d;
} -
02016-01-01 00:42:21@
献上我的愚见:program p1211;
var
y,m,d:longint;
yuefen:array[1..12] of longint;
i,x:longint;
begin
readln(y,m,d);
yuefen[1]:=31;
yuefen[10]:=31;yuefen[11]:=30;yuefen[12]:=31;
yuefen[3]:=31;yuefen[4]:=30;yuefen[5]:=31;yuefen[6]:=30;yuefen[7]:=31;yuefen[8]:=31;yuefen[9]:=30;
for i:=1 to 10000 do
begin
inc(d);
if d>yuefen[m] then
begin
inc(m);d:=1;
end;
if m>12then
begin
inc(y);
m:=1;
d:=1;
end;
if ((y mod 100 =0) and (y mod 400 =0)) or ((y mod 100 <>0 ) and (y mod 4=0)) then
yuefen[2]:=29 else yuefen[2]:=28;
end;
writeln(y,'-',m,'-',d);readln;readln;
end. -
02015-12-26 16:15:35@
第一百题纪念!
#include <cstdio>
#include <cstdlib>using namespace std;
int y, m, d;
int main(int argc, const char *argv[]) {
scanf("%d %d %d", &y, &m, &d);
for (int i = 1; i <= 10000; ++i) {
++d;
if (d == 29 && m == 2 && y % 4 != 0) {
m = 3;
d = 1;
continue;
}
if (d == 30 && m == 2 && ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))) {
m = 3;
d = 1;
continue;
}
if (d == 31 && (m == 4 || m == 6 || m == 9 || m == 11)) {
++m;
d = 1;
}
if (d == 32 && (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)) {
++m;
d = 1;
}
if (m == 13) {
++y;
m = 1;
d = 1;
}
}
printf("%d-%d-%d\n", y, m, d);
return 0;
} -
02015-11-20 19:52:07@
#include<stdio.h>
int ping[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int yun[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int f(int x)
{
if(x%400==0||((x%100!=0)&&(x%4==0)))
{
return 366;
}
else
{
return 365;
}
}
bool f1(int x)
{
if(x%400==0||((x%100!=0)&&(x%4==0)))
{
return 1;
}
else
{
return 0;
}
}
int main()
{int nian,yue,ri;
while(scanf("%d%d%d",&nian,&yue,&ri)!=EOF)
{
int i,j;
int n1;
n1=10000;
while(n1-f(nian)>=0)
{
nian++;
n1-=f(nian);
}
if(f1(nian))
{
n1-=(yun[yue]-ri);
n1--;
ri=1;
yue++;
int dd;
dd=0;
for(i=yue;i<=12;i++)
{
if(n1-yun[i]<0)
{
dd=1;//˵Ã÷ûÓнüλ
break;
}
else
{
n1-=yun[i];
yue++;
}
}
if(dd==1)
{
printf("%d-%d-%d",nian,yue,ri+n1);
}
else
{
nian++;
yue=1;
for(i=yue;i<=12;i++)
{
if(n1-ping[i]<0)
{
break;
}
else
{
n1-=ping[i];
yue++;
}
}
printf("%d-%d-%d",nian,yue,ri+n1);
}
}
else
{
n1-=(ping[yue]-ri);
n1--;
ri=1;
yue++;
int dd;
dd=0;
for(i=yue;i<=12;i++)
{
if(n1-ping[i]<0)
{
dd=1;//˵Ã÷ûÓнüλ
break;
}
else
{
n1-=ping[i];
yue++;
}
}
if(dd==1)
{
printf("%d-%d-%d",nian,yue,ri+n1);
}
else
{
nian++;
if(f1(nian))
{
yue=1;
for(i=yue;i<=12;i++)
{
if(n1-yun[i]<0)
{
break;
}
else
{
n1-=yun[i];
yue++;
}
}
printf("%d-%d-%d",nian,yue,ri+n1);
}
else
{
yue=1;
for(i=yue;i<=12;i++)
{
if(n1-ping[i]<0)
{
break;
}
else
{
n1-=ping[i];
yue++;
}
}
printf("%d-%d-%d",nian,yue,ri+n1);
}
}
}
}
return 0;
} -
02015-01-09 19:59:11@
哦= =要当心不要一到30天就换月,因为30号你还没过= =555,磨蹭了我好久。
###block code
program P1211;
var y,m,d,i:longint;
pd:boolean;
function runnian(x:longint):boolean;
begin
if ((x mod 4=0) and (x mod 100<>0)) or (x mod 400=0) then
exit(true)
else
exit(false);
end;procedure change;
begin
case m of
1:if d=32 then begin d:=1; inc(m); end;
3:if d=32 then begin d:=1; inc(m); end;
4:if d=31 then begin d:=1; inc(m); end;
5:if d=32 then begin d:=1; inc(m); end;
6:if d=31 then begin d:=1; inc(m); end;
7:if d=32 then begin d:=1; inc(m); end;
8:if d=32 then begin d:=1; inc(m); end;
9:if d=31 then begin d:=1; inc(m); end;
10:if d=32 then begin d:=1; inc(m); end;
11:if d=31 then begin d:=1; inc(m); end;
12:if d=32 then begin d:=1; inc(m); end;
end;pd:=runnian(y);
if m=2 then
begin
if (pd=true) and (d=30) then
begin
d:=1; inc(m);
end;
if (pd=false) and (d=29) then
begin
d:=1; inc(m);
end;
end;if m=13 then
begin
inc(y); m:=1;
end;end;
begin //main
read(y,m,d);
for i:=1 to 10000 do
begin
inc(d);
if (d>=28) and (m=2) then
change;
if d>=30 then
change;
end;write(y,'-',m,'-',d);
end. -
02014-10-19 15:13:11@
过了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!