1.蒜头君的生日
## 题目如下
注意:闰年二月有29天
法一:公式法 蔡基姆拉尔森计算公式:
W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1)%7 ,在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
法二:直接写
代码如下:
#include<bits/stdc++.h>
using namespace std;
string day[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
bool isyear(int y)//判断闰年
{
if(y%4==0&&y%100!=0||y%400==0)return true;
else return false;
}
int whichday(int y,int m,int d)
{
/*公式法
if(m<=2)
{
m+=12;
y--;//上一年的13、14月
}
return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;*/
//数组下标减一
int i,weekday=0;
for(i=1;i<y;i++)
{
if(isyear(i)){
weekday+=366;
weekday%=7;
}
else{
weekday+=365;
weekday%=7;
}
}
for(i=1;i<m;i++){
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
weekday+=31;
weekday%=7;
}
if(i==4||i==6||i==9||i==11){
weekday+=30;
weekday%=7;
}
if(i==2){
if(isyear(y)){
weekday+=29;
weekday%=7;
}
else{
weekday+=28;
weekday%=7;
}
}
}
weekday+=d-1;
weekday%=7;
return weekday;
}
int main()
{
int y,m,d;
cin>>y>>m>>d;
cout<<day[whichday(y,m,d)]<<endl;
return 0;
}
恋爱纪念日
蒜头君和花椰妹谈恋爱啦。祝福他们吧。蒜头君想知道他们的第 100天,200天 … 纪念日。
输入格式
输入 4个整数 y,m,d,k,表示他们在一起的日期,保证是一个 1900 年 1 月 1 日以后的日期,蒜头君想知道他们的 k(0≤k≤10000)天纪念日。
输出格式
输出格式按照yyyy-mm-dd的格式输出 kk天纪念日的日期。月份和天数必须各输出 2 位。保证最后答案年份不超过 4位。
样例输入1
2016 10 1 100
样例输出1
2017-01-09
样例输入2
2017 1 1 10
样例输出2
2017-01-11
格式化输出:printf("%d-%02d-%02d",y,m,d);%02d表示数字不够两位在前补0;
代码如下:
#include<bits/stdc++.h>
using namespace std;
int mon_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//补0保证下标与月份对应
bool isyear(int y)
{
if(y%4==0&&y%100!=0||y%400==0)return true;
else return false;
}
int main()
{
int y,m,d,k;
cin>>y>>m>>d>>k;
for(int i=1;i<=k;i++)
{
if(isyear(y)){
mon_day[2]=29;
}
else mon_day[2]=28;
d++;
if(d>mon_day[m]){
m++;
d=1;
}
if(m>12){
y++;
m=1;
}
}
printf("%4d-%02d-%02d",y,m,d);
return 0;
}