鱼C论坛

 找回密码
 立即注册
查看: 4925|回复: 8

计算到达18岁生日所经过的总天数

[复制链接]
发表于 2016-11-29 23:29:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Problem DescriptionGardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。

Input一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。

OutputT行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。

Sample Input
11988-03-07

Sample Output
6574
新手求解 最好能有详细的注释
谢谢各位大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-30 11:31:55 | 显示全部楼层
(出生时间戳-生日时间戳)/(60*60*24)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 12:42:54 | 显示全部楼层
会魔法的魔法 发表于 2016-11-30 11:31
(出生时间戳-生日时间戳)/(60*60*24)

我试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-30 12:55:27 | 显示全部楼层
会魔法的魔法 发表于 2016-11-30 11:31
(出生时间戳-生日时间戳)/(60*60*24)

我还没学时间戳 有没有别的方法呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 16:38:36 | 显示全部楼层
给你一个思路
你可以以数组的形式建立一个年历表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 17:57:26 | 显示全部楼层
  1. /*1、年份能被4整除;
  2. 2、年份若是100的整数倍的话,需被400整除,否则是平年
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. int main(){
  7.         int a[2017];
  8.         int b[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};/* 平年月历表 */
  9.         int year1, mouth1, day1;        /* 起始日期 */
  10.         int year2, mouth2, day2;        /* 结束日期 */
  11.         int count1 = 0;        /* 计数器 */
  12.         int count2 = 0;

  13.        
  14.         //建立一个年历表
  15.         for(int i = 1; i <=2016; i++){
  16.                 if(i%100 == 0){
  17.                         if(i%400 == 0){
  18.                                 a[i] = 366;
  19.                         }
  20.                         else{
  21.                                 a[i] = 365;
  22.                         }
  23.                 }
  24.                 else{
  25.                         if(i%4 == 0){
  26.                                 a[i] = 366;
  27.                         }
  28.                         else{
  29.                                 a[i] = 365;
  30.                         }
  31.                 }
  32.         }
  33.                          
  34.         printf("请输入开始日期(xxxx-xx-xx):");
  35.         scanf("%d-%d-%d", &year1, &mouth1, &day1);
  36.        
  37.         if(a[year1] == 366){
  38.                 b[2] = 29;        /* 根据平年还是闰年修改月历表 */
  39.         }
  40.         else{
  41.                 b[2] = 28;
  42.         }
  43.        
  44.         if(day1 > b[mouth1]){
  45.                 printf("该日期不存在");
  46.                 exit(-1);         /* 结束 */
  47.         }
  48.        
  49.         for(int i = 1; i < mouth1; i++){        /* 从开始年份的第一天到开始日期的天数 */
  50.                 count1 += b[i];
  51.         }       
  52.         count1 += day1;
  53.        

  54.         printf("请输入结束日期(xxxx-xx-xx):");
  55.         scanf("%d-%d-%d", &year2, &mouth2, &day2);
  56.        
  57.         if(a[year2] == 366){
  58.                 b[2] = 29;
  59.         }
  60.         else{
  61.                 b[2] = 28;
  62.         }
  63.        
  64.         if(day2 > b[mouth2]){
  65.                 printf("该日期不存在");
  66.                 exit(0);
  67.         }
  68.        
  69.         for(int i = year1; i < year2; i++){                /* 从开始年份的第一天到结束日期的天数  */
  70.                 count2 += a[i];
  71.         }
  72.        
  73.         for(int i = 1; i < mouth2; i++){
  74.                 count2 += b[i];
  75.         }
  76.         count2 += day2;
  77.        
  78.         printf("中间间隔的天数:%d", count2 - count1);
  79.        
  80.          
  81.         return 0;
  82. }
复制代码


原来有人4年过一轮生日........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-11-30 23:47:17 | 显示全部楼层
其实还有另外一种方式:18岁的生日的话,期间一定会有3个完整的4年(把4年做一个周期),然后处理一下头尾的规律……下午帮你算的时候,算到最后才发现原来这个题目对18岁生日的定义是你出生的日期到第一个生日算一岁,而不是法律上的定义所以楼主自己搞喽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-1 20:32:01 | 显示全部楼层
DarkSE 发表于 2016-11-30 23:47
其实还有另外一种方式:18岁的生日的话,期间一定会有3个完整的4年(把4年做一个周期),然后处理一下头尾 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-1 20:34:46 | 显示全部楼层
我找到答案了
计算方法:
<1>、将出生年经过的天数与18岁那年经过的天数加在一起算作一年。
<2>、不算闰年,则18年共度过18*365天。
<3>、考虑闰年,出生年与18岁生日合在一起那年单独考虑,其他年份只要是闰年,总天数加1天即可。
<4>、单独考虑合在一起年份,若出生年是闰年,且在2月29日之前出生,那么他(她)必定经过2月29日这天,总天数加1;对于18岁那年,若是闰年,且在2月28日之后出生的,他(她)同样经过2月29这天,总天数加1.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 08:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表