本文主要是介绍02不吉利日期,noi练习题,小学生编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
02:不吉利日期
总时间限制:
1000ms
内存限制:
65536kB
描述
在国外,每月的13号和每周的星期5都是不吉利的。特别是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7)
输入
输入有一行,即一月一日星期几(w)。(1 <= w <= 7)
输出
输出有一到多行,每行一个月份,表示该月的13日是星期五。
样例输入
7
样例输出
1 10
提示
1、3、5、7、8、10、12月各有31天
4、6、9、11月各有30天
2月有28天
题目解析:
首先需要先读懂题目中各个变量的意义,输入,输出是什么。
本题中输入的为1月1日的星期,假设输入数字为2 ,则1月1日星期二。如果输入的数字为4,则表示的是1月1日星期四。
于是我们可以先写出一月份的日期及对应的星期,去找到题目要求当中的1月13日是否为星期五即可。
定义day为日,根据日的变化规律,为1到31,所以当我们写一月份的日期时,可以直接用循环语句中的i。
定义week为星期,根据星期的变化规律,当week==7的时候,下一个的值为week=1,若week不等于7的时候,例如为5,下一个值为6,可写成week++。
此知识点设计循环语句中输出两个变量。例如之前练习过的九九乘法表。
#include<bits/stdc++.h>
using namespace std;
int main(){int week;inr day;cin>>week;for(int i=1;i<=31;i++){day=i;cout<<"1月"<<i<<"日"<<"星期"<<week<<endl;if(week==7){week=1;} else{week++;}} return 0;}
此时可以输出一月份的日期和对应的星期
现在我们想要去找一月的13号是不是星期五,加一个判断语句即可
if(week==5&&day==13){
cout<<"不吉利";
}
当我们写好了一月的时候,同理可以写2月的,3月的。
假设每一个月都有31天的时候,可以写成12个循环的形式
#include<bits/stdc++.h>
using namespace std;
int main(){int week=7;for(int j=1;j<=12;j++){for(int i=1;i<=31;i++){//cout<<j<<"月"<<i<<"日星期"<<week<<endl;if(i==13&&week==5){cout<<j<<"月不吉利"<<endl; } if(week==7){week=1;}else{week++;}}
}return 0;
}
但是每个月份的天数不全都是31天,则需要利用数组
#include<bits/stdc++.h>
using namespace std;
int main(){int m[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int week=7;for(int j=1;j<=12;j++){for(int i=1;i<=m[j-1];i++){//cout<<j<<"月"<<i<<"日星期"<<week<<endl;if(i==13&&week==5){cout<<j<<"月不吉利"<<endl; } if(week==7){week=1;}else{week++;}}
}return 0;
}
上述的方法是以每个月为单位,做出12个月,然后找到哪几个月满足不吉利日期。
还有一种方法是以年为单位,给出365天,去输出一年的第一天是1月1日星期日,第二天是1月2日星期一,一直到第365天。所以我们需要考虑的是week是1到7循环,但是日期是以每个月的天数发生变更。例如1月31日的下一个是2月1日,2月28日的下一个是3月1日。
我们依然做一个简单版本,假设每个月都有31天,则day这个变量和week写法类似,当day==31时,day的下一个值为1。
#include<bits/stdc++.h>
using namespace std;
int main(){int week=7;int day=1;int a=1;//月份 for(int i=1;i<=365;i++){cout<<a<<"月"<<day<<"日星期"<<week<<endl;if(day==31){day=1;a++; } else{day++;}if(week==7){week=1;}else{week++;}}return 0;
}
输出
之后我们依然需要考虑到每个月份天数不同的问题,和之前的方法一样,增加数组。
#include<bits/stdc++.h>
using namespace std;
int main(){int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};int week=7;int day=1;int a=1;//月份 for(int i=1;i<=365;i++){//cout<<a<<"月"<<day<<"日星期"<<week<<endl;if(day==13&&week==5){cout<<a<<"月不吉利"<<endl; }if(day==m[a-1]){day=1;a++; } else{day++;}if(week==7){week=1;}else{week++;}}return 0;
}
简单课后总结,欢迎大家一起交流学习。
这篇关于02不吉利日期,noi练习题,小学生编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!