HJ73 计算日期到天数转换

题目描述:

描述
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n) ,空间复杂度:O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日

输出描述:
输出是这一年的第几天
示例1
输入:
2012 12 31

输出:
366

示例2
输入:
1982 3 4

输出:
63

解题思路

要求出日期在当前年份的第几天,首先我们要知道月份有大小月之分,年份也有平年和闰年的区分,我们需要根据输入的数据去判断然后求和。
知识点:闰年规则-维基百科
閏年是指該年有366日,即較平常年份多出一日
目前使用的格里高利曆闰年规则如下(这里的公元为公元后年份,公元前置润规则参见后续章节)[1]:

計算格里高利曆年份是平年還是閏年
1、公元年分非4的倍數,為平年。
2、公元年分為4的倍數但非100的倍數,为闰年。
3、公元年分為100的倍數但非400的倍數,为平年。
4、公元年分為400的倍數為閏年。
每逢閏年,2月份有29日,平年的2月份為28日。

因此,1979年、2018年、2021年為平年,1980年、2020年逢4的倍数為閏年,1900年逢100的倍数但非400的倍數故為平年。2000年逢400的倍数又為閏年。
因此,需要根据输入年份判断当前日期是否为闰年还是平年,若为闰年,则2月份有29天,否则为平年则2月份只有28天;
其次,当月份大于2时需要判断当前年份是平年还是闰年,若为闰年则2月份需要加上29天,否则2月份加上28天。
可以用一个数组保存12个月的天数,1,3,5,7,8,10,12月有31天,4,6,9,11有30天,2月份则比较特殊,闰年有29天,平年有28天。

C++实现代码:

#include <iostream>
using namespace std;bool isLeapYear(int year)
{if((year%400==0||(year%4==0&&year%100!=0))) {return true;}return false;
}int main()
{int year,month,day;// 每个月的天数,[1,3,5,7,8,10,12]月为31天,2月份可能为28(平年)或29天(闰年),[4,6,9,11]为30天int daysOfMonth[]={ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};while(cin >> year >> month >> day){int sum = 0;for(int i = 0; i< month-1; i++){sum=sum+daysOfMonth[i];}// 如果是闰年并且月份大于2,则在sum基础上多加1,再加上日数if(isLeapYear(year) && month>2) {sum=sum+1+day;} else { sum=sum+day;}cout<<sum<<endl;}return 0;
}

华为机试HJ73-计算日期到天数转换相关推荐

  1. 【Java版oj】day14计算日期到天数转换、幸运的袋子

    目录 一.计算日期到天数转换 (1)原题再现 (2)问题分析 (3)完整代码 二.幸运的袋子 (1)原题再现 (2)问题分析 (3)完整代码 一.计算日期到天数转换 (1)原题再现 计算日期到天数转换 ...

  2. 华为机试HJ73:计算日期到天数转换

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 根据输入的日期,计算是这一年的第几天. 输入描述: 输入一行,每行空格分割,分别是年 ...

  3. 2014华为机试,计算给定和牌麻将的番数

    一.题目如下 二.题目分析 麻将和牌有两种形式,即: 模式1 :11,11,11,11,11,11,11 模式2: 11,123,123,123,123(全部或者部分123可以被111,1111替代) ...

  4. 华为机试-8.计算面积(绘图机器的绘图笔初始位置在原点)

    [计算面积] 绘图机器的绘图笔初始位i在原点(0.0). 机器启动后其绘图笔按下面规则绘制直线: 1 )尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E, 2 )期间可通过指令在纵坐标轴方向进行偏移 ...

  5. 华为机试:计算最大乘积

    题目描述 题目解析 考察字符串操作 #include<bits/stdc++.h> using namespace std;std::vector<std::string> s ...

  6. 牛客网刷题—— 计算日期到天数转换

    目录 一.描述 输入描述: 输出描述: 二.思路: 三.代码实现 点击下方链接开始做本题: 开始做题 一.描述 根据输入的日期,计算是这一年的第几天. 保证年份为4位数且日期合法. 进阶:时间复杂度: ...

  7. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

  8. 华为机试108题(C 语言解答)

    Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...

  9. 【HUAWEI】华为机试试题-105

    LeeCode试题链接直接上 HJ1 字符串最后一个单词的长度 HJ2 计算某字符出现次数 HJ3 明明的随机数:随机数去重排序输出(小-大) HJ4 字符串分隔:输入一个字符串,请按长度为8拆分每个 ...

最新文章

  1. ArduinoYun教程之通过网络为Arduino Yun编程
  2. java中上传文件有哪些框架,Spring MVC系列教材 (八)- SPRING MVC 上传文件
  3. 粗读《构建之法》后的思考和收获
  4. 前端学习(2672): vue3.0脚手架路由改变
  5. 【转载】送到榨油厂的飞鸽传书
  6. Gradle 2.3 发布
  7. webapi 路由限制命名控件_什么是命名数据网络NDN?
  8. gzp解压命令 linux_Linux-压缩解压命令(gzip,zip,tar,bzip)
  9. php中ini set,php ini_set函数的用法
  10. C++---vector与list之间的区别
  11. captap生成验证码
  12. Java中的可变参数使用
  13. cpld的入门交流之三:JED to ABL 反编译方法
  14. Java实现抓取百度识图结果的实现和思路-3-实现断点传输
  15. scratch飞翔的小猫 电子学会图形化编程scratch等级考试一级真题和答案解析2022年3月
  16. Windows c# 生成验证码图片
  17. kali linux 入门(1) 基于win10和docker的环境搭建
  18. workflow bulider 官网下载路径
  19. java 控制台scanner的中文输入问题
  20. 玩转RT-Thread系列教程(6)--移植STemwin

热门文章

  1. duo是什么意思_为什么说陈奕迅的《浮夸》可能是一首细思极恐的粤语歌?
  2. 文艺码农~手把手教你如何绘制一辆会跑车
  3. 币氪研报|VET(VeChain)
  4. ICRA2017三篇论文泛读
  5. Mysql高13位ISBN转9位_C#ISBN10位编号转换13位
  6. 02用d编程写与写行类型
  7. 微软什么时候停止对win7进行服务器,微软官方通告:2020年1月24日起停止对windows7的技术支持...
  8. 7-2 计算职工工资 (10分)
  9. win2008 64位系统 C#实现发送邮件(ASP.NET)
  10. 手机wap网站建设的方法和技巧