<==蒟蒻开始写注释了,给个小心心不过分吧!
日期问题题解大合集
算法1
(手痒的我判断了闰年)
我们先把每个月的多少天枚举一下,放到a[]
数组里面
记住,第0
项是0
然后因为是往后一天,所以我们d++
翻译:
y
=year
m
=month
d
=day
然后我们判断,只要我们的天数大于了这个月的天数
我们就要把月份m++
,并且把日回到1号
然后我们接着判断,只要我们的月数大于了12(一年12个月)
我们就要把年份y++
,并且把月份回到1月
接下来我们还要考虑一个问题,就是一位数前加0
(输出格式)
我们只要一次判断即可
只要y
是一位数,先输出个0
,之后总之我们要输出y
和-
所以不影响
然后我们把月、日在依次判断输出一下即可
【记得换行】
参考文献
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int n,i,y,m,d;
cin>>n;
while(n--){
cin>>y>>m>>d;
if(y%4==0&&y%100!=0||y%400==0)a[2]=29;else a[2]=28;
d++;
if(d>a[m]){
m++;
d=1;
}
if(m>12){
m=1;
y++;
}
if(y<10)cout<<0;
cout<<y<<'-';
if(m<10)cout<<0;
cout<<m<<'-';
if(d<10)cout<<0;
cout<<d;
cout<<'\n';
}
}
算法2
或许你看过这个代码,因为那个人不会模拟,搁那暴力,还错一大堆,我帮他修复的,属于我的版权哟~
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a,b,c,i;
cin>>n;
for(i=1;i<=n;i++){
cin>>a>>b>>c;
if(b==1&&c<=8||b==2&&c<=8||b==3&&c<=8||b==4&&c<=8||b==5&&c<=8||b==6&&c<=8||b==7&&c<=8||b==8&&c<=8||b==9&&c<=8)cout<<a<<'-'<<0<<b<<'-'<<0<<c+1<<endl;
if(b==1&&c>=9&&c<31||b==2&&c>=9&&c<28||b==3&&c>=9&&c<31||b==4&&c>=9&&c<30||b==5&&c>=9&&c<31||b==6&&c>=9&&c<30||b==7&&c>=9&&c<31||b==8&&c>=9&&c<31||b==9&&c>=9&&c<30)cout<<a<<'-'<<0<<b<<'-'<<c+1<<endl;
if(b==1&&c==31||b==2&&c==28||b==3&&c==31||b==4&&c==30||b==5&&c==31||b==6&&c==30||b==7&&c==31||b==8&&c==31)cout<<a<<'-'<<0<<b+1<<'-'<<0<<1<<endl;
if(b==10&&c<=8||b==11&&c<=8)cout<<a<<'-'<<b<<'-'<<0<<c+1<<endl;
if(b==10&&c>=9&&c<31||b==11&&c>=9&&c<30)cout<<a<<'-'<<b<<'-'<<c+1<<endl;
if(b==9&&c==30||b==10&&c==31||b==11&&c==30)cout<<a<<'-'<<b+1<<'-'<<0<<1<<endl;
if(b==12&&c<=8)cout<<a<<'-'<<b<<'-'<<0<<c+1<<endl;
if(b==12&&c>=9&&c<31)cout<<a<<'-'<<b<<'-'<<c+1<<endl;
if(b==12&&c==31)cout<<a+1<<'-'<<0<<1<<'-'<<0<<1<<endl;
}
}
日期类 不是考 写成类吗??
Orz
stO
Orz