codeup cid=10000578 练习题答案

codeup 日期处理

题号:10000578

A题:日期差值

题目链接:http://codeup.cn/problem.php?cid=100000578&pid=0

#include <cstdio>
int month[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}
	};
bool isLeap(int year){
	return (year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
	int time1,y1,m1,d1;
	int time2,y2,m2,d2;
	while(scanf("%d%d",&time1,&time2)!=EOF){
		if(time1>time2){ //第一个日期晚于第二个日期,则交换 
			int temp=time1;
			time1=time2;
			time2=temp;
		}
		y1=time1/10000,m1=time1%10000/100,d1=time1%100;
		y2=time2/10000,m2=time2%10000/100,d2=time2%100;
		int ans=1;//记录结果
		while(y1<y2||m1<m2||d1<d2){
			d1++;
			if(d1==month[m1][isLeap(y1)]+1){//满当月天数 
				m1++;
			    d1=1;
			}
			if(m1==13){
				y1++;
				m1=1;
			} 
			ans++;//累加 

		} 
		printf("%d\n",ans);
	}
	return 0;
}

运行结果:
在这里插入图片描述

B题:Day of Week

题目链接:http://codeup.cn/problem.php?cid=100000578&pid=1

#include<iostream>
#include<cstring>
#define ISLEAP(x)  (x%4==0&&x%100!=0)||x%400==0?1:0
using namespace std;
int YofM[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 date;
    int month;
    int year;
    Date() {
        date = 1; month = 0; year = 0;
    }
    void nextdate() {
        date++;
        if (date>YofM[month][ISLEAP(year)]) {
            month++; 
			date = 1;
            if (month>12)
            {
                year++; month = 1;
            }
        }//if
    }
};
char monthName[13][20] = {
    "","January","February","March","April","May","June","July",
    "August","September","October","November","December"
};
char weekName[7][20] = {
    "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
};
int Daycount[3001][13][32];
int main() {
    Date D;
    int num = 0;
    while (D.year <= 3000) {
        Daycount[D.year][D.month][D.date] = num;
        D.nextdate();
        num++;
    }//while
    int d, m, y;
    char s[20];
    while (cin >> d >> s >> y) {
        for (m = 1; m<13; m++) {
            if (strcmp(s, monthName[m]) == 0) { break; }
        }//for
        int i = Daycount[y][m][d] - Daycount[2018][2][25];
        cout << weekName[(i % 7 + 7) % 7];
    }//while
    return 0;
}

结果:
在这里插入图片描述

注意:测试结果有问题没解决

C题:打印日期

题目链接:http://codeup.cn/problem.php?cid=100000578&pid=2

#include<stdio.h>
	int month[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}}; //全局变量
	
	bool isLeep(int year) {
		return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
	}

	int main () {
		int y, n, m, d;
		while(scanf("%d%d", &y, &n) != EOF){
			d = 0, m = 1;				
			for(int i = 0; i < n; i++){  
				if(d == month[m][isLeep(y)] ){
					m++;
					d = 0;
				}
				if(m == 13){
					y++;
					m = 1;
				}
				d++; 
			}
			printf("%04d-%02d-%02d\n", y, m, d);  // 年份也左对齐,保留四位!!! 否则答案错误50
		}
		return 0;
	}

运行结果:
在这里插入图片描述

D题:日期类

题目链接:http://codeup.cn/problem.php?cid=100000578&pid=3

#include <cstdio>
int monthNumber[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}
	};
bool isLeap(int year){
	return (year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
	int y,m,d,n=1;
	int m1;
	scanf("%d", &m1);
	while(m1>0){
		scanf("%d%d%d", &y, &m, &d);
		while(n>0){
			d++;
			if(d==monthNumber[m][isLeap(y)]+1){
				m++;
				d=1;
			}
			if(m==13){
				y++;
				m=1;
			}
			n--;
		}
		printf("%04d-%02d-%02d\n", y, m, d);
		m=1, d=0, n=1;
		m1--;
	}
	return 0;

}

运行结果:
在这里插入图片描述

E题:日期累加

题目链接:http://codeup.cn/problem.php?cid=100000578&pid=4

#include <cstdio>
int monthNumber[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}
	};
bool isLeap(int year){
	return (year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
	int y,m,d,add;
	int m1;
	scanf("%d", &m1);
	while(m1>0){
		scanf("%d%d%d%d", &y, &m, &d,&add);
		while(add>0){
			d++;
			if(d==monthNumber[m][isLeap(y)]+1){
				m++;
				d=1;
			}
			if(m==13){
				y++;
				m=1;
			}
			add--;
		}
		printf("%04d-%02d-%02d\n", y, m, d);
		m=1, d=0;
		m1--;
	}
	return 0;

}

运行结果:
在这里插入图片描述

发布了4 篇原创文章 · 获赞 1 · 访问量 125

猜你喜欢

转载自blog.csdn.net/weixin_42491648/article/details/104622987