网络销售网站,榆林网站开发,展台设计搭建服务,the7 wordpress主题正常情况下#xff0c;小云每天跑 1 千米。如果某天是周一或者月初#xff08;1 日#xff09;#xff0c;为了激励自己#xff0c;小云要跑 2 千米。如果同时是周一或月初#xff0c;小云也是跑 2 千米。
小云跑步已经坚持了很长时间#xff0c;从 1990 年 1 月 1 日周…正常情况下小云每天跑 1 千米。如果某天是周一或者月初1 日为了激励自己小云要跑 2 千米。如果同时是周一或月初小云也是跑 2 千米。
小云跑步已经坚持了很长时间从 1990 年 1 月 1 日周一含到 2022 年 2 月 20 日周日含。请问某一天小云总共跑步多少千米
输入格式:
有多组数据每行为三个正整数且不超过小云跑步日期的范围。
输出格式:
对每一组输入在一行中输出小云总共跑步多少千米。
输入样例:
2020 1 1
1990 5 1输出样例:
12833
143代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 思路 1、从字符串中提取年月日 2、计算有多少天 3、加上周一的数量和包含月的数量 4、减去既是周一又是月初 #includestdio.h
#include string.h
//codeblocks 需要嗯两次ctrlz才能结束
int main()
{int year,month,day;int n1;char input[100];int i0;for (;scanf(%c,input[i])!EOF;i){if (input[i]\n)n;}input[i]\0;//与下面i0;int y,x,y0;while (n--){
//从字符串中提取年月日year (input[i]-0)*1000 (input[i] -0)*100 (input[i] - 0)*10 input[i]-0;i;if (input[i1]! )month (input[i] - 0)*10 input[i]-0;elsemonth input[i]-0;i2;//判断日期有几位if ( input[i1]!\0 input[i1]!\n)//上面结尾必须加\0 不同的编译器不同的结果 加上i1strlen(input)与input[i1]!\0二选一//if(input[i1]0 input[i1]9)gcc不加\0使用strlen得到的结果比实际商 clang与实际长度相同但是答案也有不对的{//printf(a%daa%ca%daa\n,i,input[16],strlen(input));例题中没有这种情况day (input[i] - 0)*10 input[i]-0;}elseday input[i]-0;i2;
//计算有多少天y year - 1990 ; //不用减1y0 y; //记录有多少完整的年 用于后面计算有多少个月初x0; //完整的年中闰年的个数if (y2)x (y-3)/4 1; //1992结果为1 2020结果为7 从1990年到1992为第一个闰年 从93年开始每4年一个闰年 所以减3而不是减2y y * 365 x; //完整的年中的天数if (year1990){y0;y00;}if (year %4 0 year%100 ! 0 || year%400 0)//闰年额外加1{if (month 2 || month 2 day 29)y;}for(year1;yearmonth;year)//month1不执行 加上不完整年完整月的天数{if (year 1 || year 3 || year 5 || year 7 || year 8 || year 10 || year 12)y 31;else if(year2)y28;elsey30;}y day; //加上不完整月的为总天数day y; //记录总天数 用于后面减去重复的
//计算周一的数量和包含月的数量最后在减去重复的if (y%7) //每个周一初跑2km 每个月初跑2km 有余数需要额外加1 不完整的星期会包括周一y y/7 month 1;elsey y/7 month;y y0*12; //y0表示有多少个完整的年 乘12代表每个月初跑2km
//减去既是周一又是月初 int today1;year 1990;month 1;y--; //第1天既是月初又是周一while (todayday){if (month 1 || month 3 || month 5 || month 7 || month 8 || month 10 || month 12)today 31;else if (month 2){if (year%4 0 year%100 ! 0 || year%400 0){today 29;}else today 28;}elsetoday 30;if (todayday) //!!!!不判断会超范围break;if (today%71)y--;if (month12) //新的一年更新月{month 1;year ;}elsemonth;}printf(%d\n,y);}
}