任给三个用一个空格隔开的整数,依次表示年、月、日,说出它是今年的第几天。定义该年的第1天是1月1日。有多组测试数据.输入的第一行是整数T(1<=T<=200), 表示随后测试数据的组数. 每组测试数据占一行, 由三个分别表示年、月、日的正整数构成. 相邻两个数之间有一个空格.对应每组测试数据, 输出一行的结果.要求满足acm竞赛要求,使用C语言
时间: 2024-02-25 08:58:19 浏览: 291
以下是使用C语言的代码实现:
```c
#include <stdio.h>
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int year, month, day;
scanf("%d %d %d", &year, &month, &day);
int ans = 0;
int daysOfMonths[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeapYear(year)) {
daysOfMonths[2] = 29;
}
for (int i = 1; i < month; i++) {
ans += daysOfMonths[i];
}
ans += day;
printf("%d\n", ans);
}
return 0;
}
```
代码思路:
1. 首先使用 `isLeapYear` 判断给定的年份是否是闰年,是则返回 1,不是则返回 0。
2. 对于每一组测试数据,读入年、月、日,然后初始化 `ans` 为 0。
3. 根据给定的年份是否是闰年,初始化 `daysOfMonths` 数组,数组下标表示月份,数组元素表示该月份的天数。
4. 遍历月份 1 到 `month-1` ,将每个月份的天数加到答案中。
5. 将给定的日期的天数加到答案中。
6. 输出答案。
代码中使用了函数 `isLeapYear` 来判断是否是闰年,这个函数可以写得更简洁一些,比如:
```c
int isLeapYear(int year) {
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
```
这个函数的原理是:如果一个年份能被 4 整除但不能被 100 整除,或者能被 400 整除,那么它就是闰年。
阅读全文