王道論壇計算機考研機試指南 二 日期類問題

二日期類問題

例2.3 日期差值 (九度教程第6題)
時間限制:1秒 **內(nèi)存限制:32兆 ** 特殊判題:否

題目描述:
有兩個日期渠旁,求兩個日期之間的天數(shù)剂跟,如果兩個日期是連續(xù)的我們規(guī)定他們之間的天數(shù)為兩天

輸入:
有多組數(shù)據(jù)沼本,每組數(shù)據(jù)有兩行敬察,分別表示兩個日期漠畜,形式為YYYYMMDD

輸出:
每組數(shù)據(jù)輸出一行币他,即日期差值

樣例輸入:
20110412
20110422

樣例輸出:
11

來源:
2009年上海交通大學(xué)計算機研究生機試真題

#include <stdio.h>
#define ISYEAP(x) x%100 != 0 && x%4 ==0 || x%400 == 0 ? 1:0
// 定義宏判斷是否是閏年,方便計算每月天數(shù)
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
}; // 預(yù)存每天的天數(shù)憔狞,注意二月配合宏定義做特殊處理
struct Date {
    int Day;
    int Month;
    int Year;
    void nextDay() {
        Day ++;
        if (Day > dayOfMonth[Month][ISYEAP(Year)]) { //若天數(shù)超過了當月最大日數(shù) 
            Day = 1;
            Month ++; // 進入下一月 
            if(Month > 12) { //月數(shù)超過12
            Month = 1;
            Year ++; // 進入下一年 
            } 
        }
    } 
};
 
int buf[5001][13][32]; //保存預(yù)處理的天數(shù)
int Abs(int x) { // 求絕對值
    return x < 0 ? -x: x; 
} 
int main () {
    Date tmp;
    int cnt = 0; //天數(shù)計數(shù)
    tmp.Day = 1;
    tmp.Month = 1;
    tmp.Year = 0; //初始化日期類對象為0年1月1日
    while (tmp.Year != 5001) { //日期類不超過5000年
        buf[tmp.Year][tmp.Month][tmp.Day] = cnt; // 將該日與0年1月1日的天數(shù)差保存起來 
        tmp.nextDay(); //計算下一天日期
        cnt ++;
    } 
    int d1,m1,y1;
    int d2,m2,y2;
    while (scanf ("%4d%2d%2d",&y1,&m1,&d1) != EOF) { 
        scanf ("%4d%2d%2d",&y2,&m2,&d2); //讀入要計算的兩個日期
        printf("%d\n",Abs(buf[y2][m2][d2]-buf[y1][m1][d1])+1);//用預(yù)處理的數(shù)據(jù)計算兩日期差值,注意需對其求絕對值
    }
    return 0;
}
例2.4 Day of week (九度教程第7題)
時間限制:1秒 **內(nèi)存限制:32兆 ** 特殊判題:否

題目描述:
We now use the Gregorian style of dating in Russia. The leap years are years with number divisible by 4 but not divisible by 100, or divisible by 400. (閏四不閏百圆丹,閏四百)
For example, years 2004, 2180 and 2400 are leap. Years 2004, 2181 and 2300 are not leap.
Your task is to write a program which will compute the day of week corresponding to a given date in the nearest past or in the future using today’s agreement about dating.
**輸入: **
There is one single line contains the day number d, month name M and year number y(1000≤y≤3000). The month name is the corresponding English name starting from the capital letter. 輸出:
Output a single line with the English name of the day of week corresponding to the date, starting from the capital letter. All other letters must be in lower case.
樣例輸入:
9 October 2001
14 October 2001
**樣例輸出: **
Tuesday
Sunday
提示:
Month and Week name in Input/Output:January, February, March, April, May, June, July, August, September, October, November, DecemberSunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
**來源: **
2008 年上海交通大學(xué)計算機研究生機試真題

#include <stdio.h>
#include <string.h>
#define ISYEAP(x) x % 100 != 0 && x % 4 == 0 || x % 400 == 0 ? 1 : 0
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
    };
struct Date {
    int Day;
    int Month;
    int Year;
    void nextDay () {
        Day ++;
        if (Day > dayOfMonth[Month][ISYEAP(Year)]) {
            Day = 1;
            Month ++;
            if (Month > 12) {
                Month = 1;
                Year ++;
            }
        }   
    }
};
int buf[3001][13][32];
char monthName[13][20]={
    "",
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
    };//月名 每個月名對應(yīng)下標1到12
    char weekName[7][20] = {
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday"
    };//周名 每個周名對應(yīng)下標0到6
int main() {
    Date tmp;
    int cnt = 0;
    tmp.Day = 1;
    tmp.Month = 1;
    tmp.Year = 0;
    while (tmp.Year != 3001) {
        buf[tmp.Year][tmp.Month][tmp.Day] = cnt;
        tmp.nextDay();
        cnt ++;
    }//以上與上題一致,預(yù)處理出每一天與原點日期的天差數(shù)
    int d, m, y;
    char s[20];
    while(scanf("%d%s%d",&d,s,&y)!=EOF) {
        for (m = 1; m <= 12; m++) {
            if(strcmp(s,monthName[m])==0) {
                break;//將輸入字符串與月名比較得出月數(shù)
            }
        }
    int days = buf[y][m][d]-buf[2012][7][16];//計算給定日期與今日日期的天數(shù)間隔(注意可能為負)
    days += 1;//今天(2012.7躯喇。16)為星期一辫封,對應(yīng)數(shù)組下標為1,則計算1進經(jīng)過days天后的下標 
    puts(weekName[(days%7+7)%7]);//將計算后得出的下標用7對其取模廉丽,并且保證其為非負數(shù)倦微,則該下標極即為答案所對應(yīng)的下標,輸出即可 
    } 
    return 0;   
} 
例2.4 今年的第幾天正压? (九度教程第8題)
時間限制:1秒 **內(nèi)存限制:32兆 ** 特殊判題:否

題目描述:
輸入年欣福、月、日焦履,計算該天是本年的第幾天拓劝。

輸入:
包括三個整數(shù)年(1<=Y<=3000)、月(1<=M<=12)嘉裤、日(1<=D<=31)郑临。

輸出:
輸入可能有多組測試數(shù)據(jù),對于每一組測試數(shù)據(jù)屑宠,
輸出一個整數(shù)厢洞,代表Input中的年、月典奉、日對應(yīng)本年的第幾天躺翻。

樣例輸入:
1990 9 202000 5 1

樣例輸出:
263122

來源:
2003年清華大學(xué)計算機研究生機試真題

#include <stdio.h>
#define ISYEAP(x) x%100 != 0 && x%4 ==0 || x%400 == 0 ? 1:0
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
};
struct Date {
    int Day;
    int Month;
    int Year;
    void nextDay() {
        Day ++;
        if (Day > dayOfMonth[Month][ISYEAP(Year)]) { 
            Day = 1;
            Month ++; 
            if(Month > 12) { 
            Month = 1;
            Year ++; 
            } 
        }
    } 
};

int buf[5001][13][32]; 
int Abs(int x) { 
    return x < 0 ? -x: x; 
} 
int main () {
    Date tmp;
    int cnt = 0; 
    tmp.Day = 1;
    tmp.Month = 1;
    tmp.Year = 0; 
    while (tmp.Year != 5001) { 
        buf[tmp.Year][tmp.Month][tmp.Day] = cnt; 
        tmp.nextDay();
        cnt ++;
    } 
    int d1,m1,y1;
    int d2,m2,y2;
    while (scanf ("%4d%2d%2d",&y1,&m1,&d1) != EOF) { 
        //scanf ("%4d%2d%2d",&y2,&m2,&d2); 
        printf("%d\n",Abs(buf[y1][m1][d1]-buf[y1][1][1])+1);
    }
    return 0;
}
例2.4 打印日期 (九度教程第9題)
時間限制:1秒 **內(nèi)存限制:32兆 ** 特殊判題:否

題目描述:
給出年分m和一年中的第n天,算出第n天是幾月幾號卫玖。

輸入:
輸入包括兩個整數(shù)y(1<=y<=3000)公你,n(1<=n<=366)。

輸出:
可能有多組測試數(shù)據(jù)假瞬,對于每組數(shù)據(jù)陕靠,按 yyyy-mm-dd的格式將輸入中對應(yīng)的日期打印出來嚣崭。

樣例輸入:
2000 3
2000 31
2000 40
2000 60
2000 61
2001 60

樣例輸出:
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01

來源:
2003-2005年華中科技大學(xué)計算機研究生機試真題

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0


int dayOfMonth[13][2]=
{
    {0,0},//0
    {31,31},//1
    {28,29},//2
    {31,31},//3
    {30,30},//4
    {31,31},//5
    {30,30},//6
    {31,31},//7
    {31,31},//8
    {30,30},//9
    {31,31},//10
    {30,30},//11
    {31,31}//12
};


int main()
{
    int y,n;
    while(scanf("%d %d",&y,&n)!=EOF)
    {
        int i;
        int m=ISYEAP(y);
        for(i=0;n>dayOfMonth[i][m];i++)
        {
            n-=dayOfMonth[i][m];
        }
        printf("%04d-%02d-%02d\n",y,i,n);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市懦傍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芦劣,老刑警劉巖粗俱,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虚吟,居然都是意外死亡寸认,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門串慰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偏塞,“玉大人,你說我怎么就攤上這事邦鲫【牡穑” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵庆捺,是天一觀的道長古今。 經(jīng)常有香客問我,道長滔以,這世上最難降的妖魔是什么捉腥? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮你画,結(jié)果婚禮上抵碟,老公的妹妹穿的比我還像新娘。我一直安慰自己坏匪,他們只是感情好拟逮,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著适滓,像睡著了一般唱歧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粒竖,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天颅崩,我揣著相機與錄音,去河邊找鬼蕊苗。 笑死沿后,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的朽砰。 我是一名探鬼主播尖滚,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼喉刘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漆弄?” 一聲冷哼從身側(cè)響起睦裳,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撼唾,沒想到半個月后廉邑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡倒谷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年蛛蒙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渤愁。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡牵祟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抖格,到底是詐尸還是另有隱情诺苹,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布雹拄,位于F島的核電站筝尾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏办桨。R本人自食惡果不足惜筹淫,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呢撞。 院中可真熱鬧损姜,春花似錦、人聲如沸殊霞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绷蹲。三九已至棒卷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祝钢,已是汗流浹背比规。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拦英,地道東北人蜒什。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像疤估,于是被迫代替她去往敵國和親灾常。 傳聞我的和親對象是個殘疾皇子霎冯,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容