九度OJ 1096 日期差值

题目1096:日期差值

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:5143

解决:1789

题目描述:

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

输入:

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

输出:

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

样例输入:
20110412
20110422
样例输出:
11
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int isLeapYear(int y)
{
    if((y%4==0&&y%100!=0)||y%400==0)return 1;
    return 0;
}
int getdays(int y,int m,int d,int flag)
{
    int result=0;
    if(isLeapYear(y))
    {
        months[2]+=1;
        int i=1;
        while(i<m){
            result+=months[i];
            i++;
        }
        result+=d;
        months[2]-=1;
        if(flag==0)
        {
            return 366-result+1;
        }
        else
            return result;
    }
    int i=1;
    while(i<m){
        result+=months[i];
        i++;
    }
    result+=d;
    if(flag==0)
    {
        return 365-result+1;
    }
    else
        return result;
}

int main(int argc, char *argv[])
{
    int y1,m1,d1,y2,m2,d2;
    char s1[10];
    char s2[10];
    char t[10];
    while(~scanf("%s%s",s1,s2))
    {
        strncpy(t,s1,4);
        t[4]='\0';
        y1=atoi(t);
        strncpy(t,s1+4,2);
        t[2]='\0';
        m1=atoi(t);
        strncpy(t,s1+6,2);
        t[2]='\0';
        d1=atoi(t);

        strncpy(t,s2,4);
        t[4]='\0';
        y2=atoi(t);
        strncpy(t,s2+4,2);
        t[2]='\0';
        m2=atoi(t);
        strncpy(t,s2+6,2);
        t[2]='\0';
        d2=atoi(t);
        //printf("%d %d %d ---- %d %d %d\n",y1,m1,d1,y2,m2,d2);
        if(y1!=y2)
        {
            int re=getdays(y1 , m1 , d1 , 0);
            for(int i=y1+1;i<y2;++i)
            {
                if(isLeapYear(i))
                    re+=366;
                else
                    re+=365;
            }
            re+=getdays(y2, m2 , d2 ,1);
            printf("%d\n",re);
        }
        else
            printf("%d\n",getdays(y2 , m2 , d2 , 1)-getdays(y1 , m1 , d1 , 1)+1);
    }
    return 0;
}

/**************************************************************
    Problem: 1096
    User: kirchhoff
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:920 kb
****************************************************************/
时间: 2024-10-12 17:17:30

九度OJ 1096 日期差值的相关文章

1096.日期差值

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 #include<stdio.h> #define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0?1:0 int dayofmonth[13][2]= { 0,0, 3

九度OJ 1097 取中值

题目1097:取中值 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4379 解决:1188 题目描述: 存在两组数组,和4个数字a,b,c,d,要求做如下操作,将第一个数组第a个数到第b个数,第二个数组的第c个数到第d个数放到一个数组中,求出合并后数组的中间值,如果有两个中间值,取下标较小的那个. 输入: 第一行一个整数t表示有t个测试数据 第二行两个整数,表示两个数组的长度, 接下来两行表示两个数字的值, 最后一行有四个整数a,b,c,d. 数组长度不会超过1000000. 输出

九度OJ 打印日期 (模拟)

题目1186:打印日期 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4284 解决:1483 题目描写叙述: 给出年分m和一年中的第n天,算出第n天是几月几号. 输入: 输入包含两个整数y(1<=y<=3000),n(1<=n<=366). 输出: 可能有多组測试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中相应的日期打印出来. 例子输入: 2000 3 2000 31 2000 40 2000 60 2000 61 2001 60 例子输出: 2000

九度oj 题目1096:日期差值

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #include

九度题目1096:日期差值

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 #include<stdio.h> #include<algorithm> #include<iostream> #include<stack> #include<vector&

题目1096:日期差值 Java/C++

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 Java AC 代码: import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[]

题目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,

九度oj 题目1546:迷宫问题 (概率dp guess消元)

题目链接:点击打开链接 题目描述: 给定一个n*m的迷宫,如 S.. ..# E.E 其中,S代表开始位置,#代表不可行走的墙,E代表出口. 主人公从开始位置出发,每次等概率的随机选择下一个可以行走的位置,直到到达某一个出口为止. 现在他想知道,在这一概率事件中,它从开始位置走到某一个出口的期望步数是多少. 输入: 输入包含多组测试用例,每组测试用例由两个整数n,m(1<=n,m<=15)开始,代表迷宫的大小 接下去n行每行m个字符描述迷宫信息,具体规则如题面所述. 数据保证至少存在一个E和一

九度oj 题目1007:奥运排序问题

九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1. 第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万). 接下来一行给出M个国家号. 输出:                        排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名 格式为: 排名:排名