背景:
中国有句老话,"三天打鱼两天晒网”。假设渔民老张从1990年1月1日开始"三天打鱼两天晒网”,那么请你帮助推算出在以后某一天中,老张是在"打鱼”,还是在"晒网”。
输入:
第一行是测试的组数。以后每一行是一组要测试的时间,有三个数据,分为表示为年、月、日。
输出:
根据输入的日期,打印出相应的情况(打鱼还是晒网),具体格式见测试用例。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 无限制 | 64M | 0 |
#include <stdio.h>
#include <time.h>
// 将日期转换为time_t(秒时间戳)
time_t dateToTimestamp(int year, int month, int day) {
struct tm date = {0};
date.tm_year = year - 1900; // 年份从1900年开始计算
date.tm_mon = month - 1; // 月份从0开始计算
date.tm_mday = day;
return mktime(&date); // 将tm结构转换为time_t
}
int main() {
int n; // 测试的组数
scanf("%d", &n);
int year, month, day;
for (int i = 0; i < n; i++) {
scanf("%d %d %d", &year, &month, &day);
// 1990年1月1日为基准日期
time_t startDate = dateToTimestamp(1990, 1, 1);
time_t testDate = dateToTimestamp(year, month, day);
// 计算两个日期之间的秒数差
double diff = difftime(testDate, startDate);
// 计算天数
int days = (int)(diff / (24 * 3600));
// 计算周期
int cycleDay = (days % 5) + 1;
if (cycleDay <= 3) {
printf("He was fishing on %d.%d.%d\n", year, month, day);
} else {
printf("He was basking on %d.%d.%d\n", year, month, day);
}
}
return 0;
}