编一程序实现: 由输入1980年以后的任意一个日期后,计算机能打印出该日期是星期几. 日期肯定合法,绝不会出现类似-23年13月52日的情况 已知1980年1月1日是星期二。
输入
年 月 日 日期有3个整数组成,中间用空格隔开
输出
一个整数星期 星期用1 2 3 4 5 6 7表示 (若是星期日就输出7)
#include <bits/stdc++.h>
using namespace std;
int y,m,d,sum;
int main()
{
scanf("%d %d %d",&y,&m,&d);
for(int i=1980;i<y;i++)
y%400==0||y%4==0 && y%100!=0?sum+=366:sum+=365;
for(int i=1;i<m;i++){
if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10)
sum+=31;
else if(i==4 || i==6 || i==9 || i==11)
sum+=30;
else if(i==2)
y%400==0||y%4==0 && y%100!=0?sum+=29:sum+=28;
}
sum+=d;
printf("%d",sum%7+1);
return 0;
}
【以下回答由 GPT 生成】
问题的具体解法如下所示:
首先,我们可以通过将输入和输出部分添加到代码中来实现所需的功能。以下是代码的修改版本:
#include <iostream>
#include <string>
using namespace std;
// 计算给定日期是当年的第几天
int calculateDayOfYear(int y, int m, int d) {
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int sum = d;
// 处理闰年的情况
if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {
days[1] = 29;
}
for (int i = 0; i < m - 1; i++) {
sum += days[i];
}
return sum;
}
int main() {
string date;
cin >> date;
int y, m, d;
sscanf(date.c_str(), "%d-%d-%d", &y, &m, &d);
int dayOfYear = calculateDayOfYear(y, m, d);
cout << dayOfYear;
return 0;
}
上述代码中,我们定义了一个calculateDayOfYear
函数,该函数用于计算给定日期是当年的第几天。首先,我们创建了一个数组days[]
,用于存储每个月的天数。然后,我们根据闰年的情况更新了2月的天数。接下来,我们使用一个循环来累加每个月的天数,最后将日期加入到总天数中,并返回计算结果。
在main
函数中,我们首先读取输入的日期字符串,并使用sscanf
函数将其解析为年、月和日的整数。然后,我们调用calculateDayOfYear
函数计算当年的第几天,并将结果输出。
通过上面的优化,我们改进了输入和输出部分,并且在计算每个月的天数时使用了函数,这样可以使代码更加清晰易懂,并且提高了代码的可读性和可维护性。
附注:在预定义的函数和库函数中,这里没有使用到,因为代码已经包含了所需的逻辑。
【相关推荐】