129 条题解

• @ 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;
}
``````
• @ 2017-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;
}
``````
• @ 2021-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();
}
``````
• @ 2018-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;
}

• @ 2018-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;
}

• @ 2016-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;
}

• @ 2021-07-14 12:38:25

纯模拟

``````#include<bits/stdc++.h>
using namespace std;
int daynum[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int year,month,day;
cin>>year>>month>>day;
for(int i=0;i<10000;i++){
if((year%4==0&&year%100!=0)||year%400==0)daynum[2]=29;
else daynum[2]=28;
++day;
if(day>daynum[month]){
day=1;++month;
}
if(month>12){
month=1;++year;
}
}
printf("%d-%d-%d",year,month,day);
}
``````
• @ 2018-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'))

• @ 2017-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
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
begin

if ((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.

• @ 2017-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;
}

• @ 2017-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;
}```
``````
• @ 2016-06-16 19:37:55

/*注意到数据不大，直接枚举*/
#include <cstdio>
#define Limit 10000
#define MonthCou 12

int 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;
}

• @ 2016-05-25 13:42:45

var
q:array[1..12] of integer;
a,i,o,p:integer;
begin
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.

• @ 2016-03-08 20:05:21

var
yf:array[1..12]of integer;
begin
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.

• @ 2016-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
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.

• @ 2016-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;
}

• @ 2016-01-01 00:42:21

献上我的愚见：program p1211;
var
y,m,d:longint;
yuefen:array[1..12] of longint;
i,x:longint;
begin
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);

end.

• @ 2015-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;
}

• @ 2015-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;
}

• @ 2015-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
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.

ID
1211

3

(无)

2713

1320

49%

9