题目1096:日期差值 (2009年上海交通大学计算机研究生机试真题)

题目描述:

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

输入:

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出:

每组数据输出一行,即日期差值

样例输入:
20110412
20110422
样例输出:
11

代码如下:
#include "stdio.h"

int dayOfMonth[13][2]={
    0,0,
    31,31,
    28,29,
    31,31,
    30,30,
    31,31,
    30,30,
    31,31,
    31,31,
    30,30,
    31,31,
    30,30,
    31,31
};

typedef struct Date{
    int year;
    int month;
    int day;
}Date;

int isRunNian(int year){  //判断是否是闰年
    if((year%100!=0&&year%4==0)||(year%400==0))
        return 1;
    else
        return 0;
}

int compare(Date d1,Date d2){
    if(d1.year>d2.year)
        return 1;
    else
        if(d1.year<d2.year)
            return 0;
        else{
            if(d1.month>d2.month)
                return 1;
            else
                if(d1.month<d2.month)
                    return 0;
                else{
                    if(d1.day>d2.day)
                        return 1;
                    else
                        if(d1.day<d2.day)
                            return 0;
                        else
                            return 2;//相同日期
                }
        }

}

void nextDay(Date* date){  //计算下一天
    (*date).day++;
    if((*date).day>dayOfMonth[(*date).month][isRunNian((*date).year)]){
        (*date).day=1;
        (*date).month++;
        if((*date).month>12){
            (*date).month=1;
            (*date).year++;
        }
    }
}

int main(int argc, char* argv[])
{
    Date date1,date2;
    while(scanf("%4d%2d%2d",&date1.year,&date1.month,&date1.day)!=EOF){
        scanf("%4d%2d%2d",&date2.year,&date2.month,&date2.day);
        //printf("%d\n",compare(date1,date2));
        //printf("date1.year:%d  date1.month:%d  date1.day:%d\n",date1.year,date1.month,date1.day);
        //printf("date2.year:%d  date2.month:%d  date2.day:%d\n",date2.year,date2.month,date2.day);
        Date big_Date,small_Date;
        if(compare(date1,date2)==1){
            big_Date.year=date1.year;
            big_Date.month=date1.month;
            big_Date.day=date1.day;
            small_Date.year=date2.year;
            small_Date.month=date2.month;
            small_Date.day=date2.day;
        }
        else{
            big_Date.year=date2.year;
            big_Date.month=date2.month;
            big_Date.day=date2.day;
            small_Date.year=date1.year;
            small_Date.month=date1.month;
            small_Date.day=date1.day;
        }
        int count=1;//用于计数
        while(compare(small_Date,big_Date)==0||compare(small_Date,big_Date)==1){//小日期追赶大日期,count计数
            count++;
            nextDay(&small_Date);
        }
        printf("%d\n",count);
    }
    return 0;
}

/**************************************************************
    Problem: 1096
    User: lcyvino
    Language: C
    Result: Accepted
    Time:10 ms
    Memory:912 kb
****************************************************************/

时间: 2024-08-02 05:36:32

题目1096:日期差值 (2009年上海交通大学计算机研究生机试真题)的相关文章

字符串去特定字符-2009年哈尔滨工业大学计算机研究生机试真题

题目描述: 输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果. 输入: 测试数据有多组,每组输入字符串s和字符c. 输出: 对于每组输入,输出去除c字符后的结果. 样例输入: heallo    a 样例输出: hello 解题代码: 解法1:使用两个数组, 第二个数组存储去掉特定字符的字符串 #include <stdio.h> int main(){ char arr[200]; char arrNew[200]; char focus; while (scanf("%

判断三角形类型-2009年哈尔滨工业大学计算机研究生机试真题

题目描述: 给定三角形的三条边,a,b,c.判断该三角形类型. 输入: 测试数据有多组,每组输入三角形的三条边. 输出: 对于每组输入,输出直角三角形.锐角三角形.或是钝角三角形. 样例输入: 3 4 5 样例输出: 直角三角形 解题代码: #include <stdio.h> int main(){ int arr[3]; int temp; while (scanf("%d%d%d",&arr[0],&arr[1],&arr[2] ) != EO

考察数据类型的掌握---题目1166:迭代求立方根 (2009年北京航空航天大学计算机研究生机试真题)

题目描述: 立方根的逼近迭代方程是 y(n+1) = y(n)*2/3 + x/(3*y(n)*y(n)),其中y0=x.求给定的x经过n次迭代后立方根的值. 输入: 输入有多组数据.每组一行,输入x n. 输出: 迭代n次后的立方根,double精度,保留小数点后面六位. 样例输入: 3000000 28 样例输出: 144.224957 #include "stdio.h" int main(int argc, char* argv[]) {     long n;     dou

九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题

题目1165:字符串匹配 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2497 解决:858 题目描述: 读入数据string[ ],然后读入一个短字符串.要求查找string[ ]中和短字符串的所有匹配,输出行号.匹配字符串.匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配.如"aa[123]bb",就是说aa1bb.aa2bb.aa3bb都算匹配. 输入: 输入有多组数据. 每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(

题目1117:整数奇偶排序 (2008年北京大学图形实验室计算机研究生机试真题)

题目描述: 输入10个整数,彼此以空格分隔.重新排序以后输出(也按空格分隔),要求:1.先输出其中的奇数,并按从大到小排列:2.然后输出其中的偶数,并按从小到大排列. 输入: 任意排序的10个整数(0-100),彼此以空格分隔. 输出: 可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔. 样例输入: 4 7 3 13 11 12 0 47 34 98 样例输出: 47 13 11 7 3 0 4 12 34 98 提示: 1. 测试数据可能有很多组,请使用while(cin>>

九度oj 1034 寻找大富翁 2009年浙江大学计算机及软件工程研究生机试真题

题目1034:寻找大富翁 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5323 解决:2123 题目描述:     浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁. 输入:     输入包含多组测试用例.    每个用例首先包含2个整数n(0<n<=100000)和m(0<m<=10),其中: n为镇上的人数,m为需要找出的大富翁数, 接下来一行输入镇上n个人的财富值.    n和m同时为0时表示输入结束. 输出:     请输出乌镇前m个大富翁的财产数,财产多的

九度oj 1031 xxx定律 2009年浙江大学计算机及软件工程研究生机试真题

题目1031:xxx定律 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5153 解决:3298 题目描述:     对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止.    请计算需要经过几步才能将n变到1,具体可见样例. 输入:     测试包含多个用例,每个用例包含一个整数n,当n为0 时表示输入结束.(1<=n<=10000) 输出:     对于每组测试用例请输出一个数,表示需要经过的步数,每组输出占一行. 样例输

九度oj 1032 ZOJ 2009年浙江大学计算机及软件工程研究生机试真题

题目1032:ZOJ 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4102 解决:2277 题目描述: 读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出. 输入: 题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束.1<=length<=100. 输出: 对于每组输入,请输出一行,表示按照要求处理后的字符串.具体可见样例. 样例输入: ZZOOOJJJ ZZZZOOOOO

九度OJ 1096 日期差值

题目1096:日期差值 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5143 解决:1789 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 #include<stdio.h> #include<string.h> #include<s