跑步锻炼
跑步锻炼
- 题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。
小蓝跑步已经坚持了很长时间,从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11 日周四(含)。请问这段时间小蓝总共跑步多少千米?
ac
#include<bits/stdc++.h>
using namespace std;
int D[13];
bool check(int y){
if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) return true;
return false;
}
signed main()
{
D[1] = 31 , D[2] = 28 , D[3] = 31 , D[4] = 30 , D[5] = 31 , D[6] = 30;
D[7] = 31 , D[8] = 31 , D[9] = 30 , D[10] = 31 , D[11] = 30 , D[12] = 31;
int ans = 0 , week = 6;
for(int y = 2000 ; y <= 2020 ; y ++){
if(check(y)) D[2] = 29;
else D[2] = 28;
for(int m = 1 ; m <= (y == 2020 ? 10 : 12) ; m ++){
if(y == 2020 && m == 10) D[m] = 1;
for(int d = 1 ; d <= D[m] ; d ++){
if(week == 1 || d == 1) ans += 2;
else ans += 1;
week = (week + 1) % 7;
}
}
}
cout << ans << '\n';
return 0;
}
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int days[] = {
0, 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31
};
bool is_leap(int y){
return y % 100 != 0 && y % 4 == 0 || y % 400 == 0;
}
int daysOfMonth(int y, int m){
if (m == 2)
return 28 + is_leap(y);
return days[m];
}
int main()
{
int y = 2000, m = 1, d = 1, w = 6;
int res = 0;
while (y != 2020 || m != 10 || d != 2){
if (d == 1 || w == 1)
res += 2;
else
res ++;
w ++;
if (w == 8)
w = 1;
d ++;
if (d > daysOfMonth(y, m)){
m ++, d = 1;
if (m == 13)
m = 1, y ++;
}
}
cout << res << endl;
return 0;
}
-
简单模拟题,主要需要解决两个问题:---摘抄
- 是否是月初
- 是否是周天
我们可以枚举从 20002000 年 11 月 11 日到 20202020 年 1010 月 11 日的所有日期:用 yy、mm、dd 分表表示当前枚举的年、月、日,那么当 d=1d=1 为月初,否则不为月初。问题一解决。
同时我们可以定义 weekwee**k 表示当前日期所对应的星期,这样下一个日期所对应的星期就为 (week+1)%7(wee**k+1)。那么当 week=1wee**k=1 时为周一,否则不为周一。问题二解决。
最后模拟一下即可(注意判断闰年),答案为
8879。
本文来自博客园,作者:跬步瑶,转载请注明原文链接:https://www.cnblogs.com/deservee/p/16999535.html

浙公网安备 33010602011771号