当前位置: 首页 > news >正文

处理没有提示的字符串、计算相隔天数应用题

正常情况下,小云每天跑 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、减去既是周一又是月初

#include<stdio.h>
#include <string.h>
//codeblocks 需要嗯两次ctrl+z才能结束??
int main()
{int year,month,day;int n=1;char input[100];int i=0;for (;scanf("%c",&input[i])!=EOF;i++){if (input[i]=='\n')n++;}input[i]='\0';//!!!!!与下面i=0;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[i+1]!=' ')month = (input[i++] - '0')*10 + input[i]-'0';elsemonth = input[i]-'0';i+=2;//判断日期有几位if ( input[i+1]!='\0' && input[i+1]!='\n')//上面结尾必须加'\0' 不同的编译器不同的结果 加上i+1<strlen(input)与input[i+1]!='\0'二选一//if(input[i+1]>='0' && input[i+1]<='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';i+=2;
//计算有多少天y = year - 1990 ;    //不用减1y0 = y;              //记录有多少完整的年 用于后面计算有多少个月初x=0;                 //完整的年中闰年的个数if (y>2)x = (y-3)/4 + 1;       //!!!1992结果为1 2020结果为7 从1990年到1992为第一个闰年 从93年开始每4年一个闰年 所以减3而不是减2y = y * 365 + x;    //完整的年中的天数if (year==1990){y=0;y0=0;}if (year %4 == 0 && year%100 != 0  || year%400 == 0)//闰年额外加1{if (month > 2 || month ==2 && day ==29)y++;}for(year=1;year<month;year++)//month==1不执行  加上不完整年完整月的天数{if (year == 1 || year ==3 || year ==5 || year ==7 || year == 8 || year == 10 || year == 12)y += 31;else if(year==2)y+=28;elsey+=30;}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 today=1;year = 1990;month = 1;y--;    //第1天既是月初又是周一while (today<=day){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 (today>day)    //!!!!不判断会超范围break;if (today%7==1)y--;if (month==12)    //新的一年更新月{month = 1;year ++;}elsemonth++;}printf("%d\n",y);}
}

http://www.lryc.cn/news/523473.html

相关文章:

  • 【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程表 实现 Trie (前缀树)(C++)
  • react使用react-redux状态管理
  • 04_角色创建窗口
  • Dockerfile -> Docker image -> Docker container
  • LDN的蓝牙双模键盘帮助文档
  • 搭建一个基于Spring Boot的驾校管理系统
  • 运动相机拍视频过程中摔了,导致录视频打不开怎么办
  • MongoDB vs Redis:相似与区别
  • 数字图像处理:实验二
  • 基于海思soc的智能产品开发(高、中、低soc、以及和fpga的搭配)
  • SSM旅游信息管理系统
  • FastADMIN实现网站启动时执行程序的方法
  • 【威联通】FTP服务提示:服务器回应不可路由的地址。被动模式失败。
  • nginx常用配置 (含负载均衡、反向代理、限流、Gzip压缩、图片防盗链 等示例)
  • 21.1、网络设备安全概述
  • 通过idea创建的springmvc工程需要的配置
  • Redis 持久化机制:RDB 和 AOF
  • 【博客之星评选】2024年度前端学习总结
  • 将IDLE里面python环境pyqt5配置的vscode
  • 【专题三:穷举vs暴搜vs深搜vs回溯vs剪枝】46. 全排列
  • 使用傅里叶变换进行图像边缘检测
  • DDD FAQs梳理
  • 新星杯-ESP32智能硬件开发--SoC基础
  • WDM_OTN_基础知识_波分系统的网络位置
  • 计算机网络 (46)简单网络管理协议SNMP
  • Excel重新踩坑6:工作实战总结之根据筛选条件求平均成绩
  • 使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。
  • 20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识
  • 《Hands_On_LLM》8.3: 检索增强生成-RAG技术概论
  • CSS中样式继承+优先级