时间问题
1.《算法设计》例题:手动输入两个日期并判断两者相差多少天
//日期:都有一个从小日期数到大日期的过程(计数器)
//如果有输入日期为字符串 要多一步字符串处理过程
#include<iostream>
using namespace std;
//1.定义一个维数组来存储每月天数(左平 右闰)日期问题必备1
int month[13][2]={
{0,0}, //0(符合数组下标的习惯 无实际意义)
{31,31},//1 两个元素对应数组下标:month[1][0] / month[1][1]
{28,29},//2
{31,31},//3
{30,30},//4
{31,31},//5
{30,30},//6
{31,31},//7
{31,31},//8
{30,30},//9
{31,31},//10
{30,30},//11
{31,31} //12月
};
//2.判断是否为闰年的函数 日期问题必备2
bool isYeap(int year){
if(year%4==0 && year%100!=0 || year%400==0){
return true;
}else{
return false;
}
}
int main(){
//3.保证t1是小日期(输入格式:20200422)
int t1,t2;
cin>>t1>>t2;
if(t1>t2){
int t=t1;
t1=t2;
t2=t1;
}
//分别得到两个日期的年月日
int y1,m1,d1;
int y2,m2,d2;
y1=t1/10000,m1=t1%10000/100,d1=t1%100;
y2=t2/10000,m2=t2%10000/100,d2=t2%100;
//***4.具体计算两个日期差多少天*** (核心)
int count=1;
while((y1!=y2)||(m1!=m2)||(d1!=d2)){
count++;
d1++;
if(d1==month[m1][isYeap(y1)+1]){ //这一个月满了 号数回到1 月数++
d1=1;
m1++;
}
else if(m1==13){ //这一年满了 月数回到1 年数++
m1=1;
y1++;
}
}
cout<<count<<endl;
return 0;
}
2.201509-2:判断2020年的第68天是几月几号
#include<iostream>
using namespace std;
//1.日期问题必备1:判断平 or 闰年
int isYeap(int y){
if((y%4==0 && y%100!=0)|| y%400==0){
return 0; //return true返回的是0
}else{
return -1; //return false返回的是-1
}
}
int main(){
//2.日期问题必备2:每月天数(2行13列的二维数组)
int month[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}
};
//3.日期问题核心:计算日期差
int y,d,count=0,m=1,s=0;
cin>>y>>d;
while(count!=d){
count++;
s++;
if(s>month[isYeap(y)+1][m]){ //这一个月满了 号数回到1 月数++
s=1;
m++;
}
else{
s=s;
m=m;
}
}
cout<<m<<endl<<s<<endl;
return 0;
}
3.201503-3:判断2020年的第5个星期天是几月几号
#include<iostream>
using namespace std;
int isYeap(int y){
if((y%4==0 && y%100!=0) || y%400==0){
return 0;
}else{
return -1;
}
}
int month[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}
};
int main(){
int a,b,c,y1,y2;
cin>>a>>b>>c>>y1>>y2;
int y=1850,m=1,d=0,wed=2,count=0;//1850年作为参考年份
//输出[y1,y2]间每一年的日期
for(int i=y1 ; i<y2+1 ; i++){
//1.首先得到y/a/01所对应的wed(从1850年开始计算)
while((y!=i) || (m!=a)){
wed++;
d++;
if(d>month[isYeap(y)+1][m]){
d=1;
m++;
}
if(m==13){
m=1;
y++;
}
if(wed>7){
wed=1;
}
}
//2.然后根据wed、b、c三者之间关系 得到所求的day
while(count!= b){
d++;
if(wed==c){
count++;
}else{
count=count;
}
wed++;
if(wed>7){
wed=1;
}else{
wed=wed;
}
}
//3.输出格式要求
if(a<9){
cout<<i<<"/0"<<a;
if(d<9){
cout<<"/0"<<d;
}else{
cout<<"/"<<d;
}
}
else{
cout<<i<<"/"<<a;
if(d<9){
cout<<"/0"<<d;
}else{
cout<<"/"<<d;
}
}
//这里要注意哈
y=i;
count=0;
cout<<endl;
}
return 0;
}