2 solutions
-
0
这道题是要我们根据输入的年、月、日,算出来这是这一年的第几天。咱们可以这么来做哈。
解题步骤
- 判断是否是闰年:闰年的2月有29天,平年的2月有28天。闰年的判断规则是:能被4整除但不能被100整除,或者能被400整除的年份就是闰年。
- 比如说2000年,它能被400整除,所以2000年就是闰年;再比如2018年,它既不能被400整除,也不能被4整除,所以2018年就是平年。
- 计算每个月的天数:除了2月因为闰年和平年不同,其他月份的天数是固定的。1、3、5、7、8、10、12月有31天,4、6、9、11月有30天。
- 计算总天数:先把前面几个月的天数加起来,再加上当前月份的天数,就得到这是这一年的第几天啦。
C++代码示例
#include<bits/stdc++.h> using namespace std; // 判断是否是闰年的函数 bool isLeapYear(int y) { return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0); } int main() { int y, m, d; // 输入年、月、日 cin >> y >> m >> d; // 每个月的天数,2月的天数先按平年算 int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 如果是闰年,2月的天数改为29天 if (isLeapYear(y)) { days[2] = 29; } // 计算前面几个月的总天数 int totalDays = 0; for (int i = 1; i < m; i++) { totalDays += days[i]; } // 再加上当前月份的天数 totalDays += d; // 输出结果 cout << totalDays << endl; return 0; }代码解释
isLeapYear函数:这个函数是用来判断是不是闰年的。如果是闰年就返回true,不是就返回false。days数组:这个数组存的是每个月的天数,2月的天数先按平年的28天算。- 判断闰年并修改2月天数:如果是闰年,就把
days[2]改成29天。 - 计算前面几个月的总天数:用一个
for循环把前面几个月的天数加起来。 - 加上当前月份的天数:把前面几个月的总天数加上当前月份的天数,就得到这是这一年的第几天啦。
- 输出结果:最后把结果输出就好啦。
- 判断是否是闰年:闰年的2月有29天,平年的2月有28天。闰年的判断规则是:能被4整除但不能被100整除,或者能被400整除的年份就是闰年。
-
0
简单分析
🌟关键思路:先计算前面每个月的天数总和,再加上当前月的天数。要注意区分平年和闰年,闰年 2 月有 29 天,平年 2 月有 28 天哦😉。 🚫易错点:判断闰年的条件别弄错啦,是能被 4 整除但不能被 100 整除,或者能被 400 整除。还有在累加月份天数的时候,别把月份数和天数弄混咯🤭。
详细解题报告
📖题目内容
小明每天都坚持写日记,突然有一天小明在想,我今年写了多少篇日记了?一篇一篇的数好麻烦,没办法小明只能把这个艰难的问题交给聪明的你来解决。输入三个整数 y,m,d 分别表示年月日,数据均在 int 范围内。输出一个整数,表示这是今年的第几天。
🧐题意分析
这道题就是让我们根据输入的年、月、日,算出这一天是这一年的第几天。我们要考虑每个月的天数不一样,而且 2 月的天数还会因为平年和闰年而不同呢。
⭐难度等级
★★ 这道题对于刚接触编程的同学来说,有一点点小难度,主要是要处理平年和闰年的问题,还有月份天数的累加。
💡解题思路
- 首先,我们要判断这一年是平年还是闰年。闰年的判断条件是:能被 4 整除但不能被 100 整除,或者能被 400 整除。
- 然后,我们用一个数组来存储每个月的天数。如果是闰年,2 月的天数就改成 29 天。
- 接着,我们把前面每个月的天数加起来,再加上当前月的天数,就得到这是今年的第几天啦。
🤔解题反思
在做这道题的时候,要特别注意闰年的判断条件,不能写错。还有数组的下标,要和月份对应好,别弄乱了。另外,代码的逻辑要清晰,一步一步算,这样就不容易出错啦。
🖥️参考程序
#include<bits/stdc++.h> using namespace std; // 判断是否为闰年的函数 bool isLeapYear(int year) { // 能被 4 整除但不能被 100 整除,或者能被 400 整除就是闰年 return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } int main() { int y, m, d; // 输入年、月、日 cin >> y >> m >> d; // 存储每个月的天数,下标从 1 开始,0 不用 int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 如果是闰年,2 月有 29 天 if (isLeapYear(y)) { days[2] = 29; } int totalDays = 0; // 累加前面每个月的天数 for (int i = 1; i < m; i++) { totalDays += days[i]; } // 加上当前月的天数 totalDays += d; // 输出结果 cout << totalDays << endl; return 0; }
- 1
Information
- ID
- 226
- Time
- 1000ms
- Memory
- 64MiB
- Difficulty
- 8
- Tags
- # Submissions
- 16
- Accepted
- 7
- Uploaded By