鱼C论坛

 找回密码
 立即注册
查看: 5253|回复: 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、年份能被4整除;
2、年份若是100的整数倍的话,需被400整除,否则是平年
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
        int a[2017];
        int b[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};/* 平年月历表 */
        int year1, mouth1, day1;        /* 起始日期 */
        int year2, mouth2, day2;        /* 结束日期 */
        int count1 = 0;        /* 计数器 */
        int count2 = 0;

        
        //建立一个年历表 
        for(int i = 1; i <=2016; i++){
                if(i%100 == 0){
                        if(i%400 == 0){
                                a[i] = 366;
                        }
                        else{
                                a[i] = 365;
                        }
                }
                else{
                        if(i%4 == 0){
                                a[i] = 366;
                        }
                        else{
                                a[i] = 365;
                        }
                }
        }
                         
        printf("请输入开始日期(xxxx-xx-xx):");
        scanf("%d-%d-%d", &year1, &mouth1, &day1);
        
        if(a[year1] == 366){
                b[2] = 29;        /* 根据平年还是闰年修改月历表 */
        }
        else{
                b[2] = 28;
        }
        
        if(day1 > b[mouth1]){
                printf("该日期不存在");
                exit(-1);         /* 结束 */
        }
        
        for(int i = 1; i < mouth1; i++){        /* 从开始年份的第一天到开始日期的天数 */
                count1 += b[i];
        }        
        count1 += day1;
        

        printf("请输入结束日期(xxxx-xx-xx):");
        scanf("%d-%d-%d", &year2, &mouth2, &day2);
        
        if(a[year2] == 366){
                b[2] = 29;
        }
        else{
                b[2] = 28;
        }
        
        if(day2 > b[mouth2]){
                printf("该日期不存在");
                exit(0); 
        }
        
        for(int i = year1; i < year2; i++){                /* 从开始年份的第一天到结束日期的天数  */
                count2 += a[i];
        } 
        
        for(int i = 1; i < mouth2; i++){
                count2 += b[i];
        }
        count2 += day2;
        
        printf("中间间隔的天数:%d", count2 - count1);
        
         
        return 0;
}

原来有人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-11-27 18:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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