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;
}
简单课后总结,欢迎大家一起交流学习。