ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

02不吉利日期,noi练习题,小学生编程

2026/9/12 6:29:17 拓冰建站 浏览量
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;
} 

简单课后总结,欢迎大家一起交流学习。