【NYOJ】[1075]日期计算

文章字数:249

问题描述

问题分析

又是一个涉及到闰年判断的题目
不过现在看 应该已经难不倒我了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
int main() {
	int T;
	scanf("%d",&T);
	while(T--) {
		int month[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
		int y,m,d;
		scanf("%d %d %d",&y,&m,&d);
		if(y%400==0||(y%100&&y%4==0))
			month[1]++;
		int sum=0;
		for(int i=0; i<m-1; i++) {
			sum+=month[i];
		}
		printf("%d\n",sum+d);
	}
	return 0;
}

标程的亮点是通过
switch运行到底的特性
(不遇到break;便会继续运行下一个case)
巧妙地区分了31天与30天的年份

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<stdio.h>
int main() {
	int a,b=0,c,y,m,d,fib;
	scanf("%d",&a);
	while(a--) {
		scanf("%d %d %d",&y,&m,&d);
		if(y%400==0||y%100!=0&&y%4==0)
			fib=29;
		else fib=28;
		for(c=1; c<=m; c++)
			switch(c-1) {
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
					b+=31;
					break;
				case 2:
					b+=fib;
					break;
				case 4:
				case 6:
				case 9:
				case 11:
					b+=30;
					break;
			}
		b+=d;
		printf("%d\n",b);
		b=0;
	}
	return 0;
}

题目地址:日期计算

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...