PTA:7-115 计算星期值

这篇文章介绍了如何使用非循环结构的代码,根据格里高利历法的规则,计算并输出给定年份1月1日的星期,无需使用循环。作者周文俊以西南石油大学的身份给出了一个C语言实现的示例。
摘要由CSDN通过智能技术生成

作者 周文俊

单位 西南石油大学

编程序实现:输入一个年份,求出这一年的1月1日是星期几,要求使用全中文形式(如“星期六”)输出,并限定不能使用循环结构。假定从公元第一天开始,就实施格里高利历法,并且公元1年1月1日为星期一。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不闰,四百闰。

输入格式:

输入一个代表年份的正整数。

输出格式:

输出中文星期值,最后换行。

输入样例:

2021

输出样例:

在这里给出相应的输出。例如:

星期五

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
 
int main()
{
    int year;
    scanf("%d", &year);
 
    // 计算 1 月 1 日是星期几,公式为:
    // days = (year-1) + (year-1)/4 - (year-1)/100 + (year-1)/400;
    // 其中,days 是公元 1 年 1 月 1 日到输入年份的总天数,而加上
    // (year-1) 是为了排除掉公元元年的影响,因为公元元年的前一年就是公元前 1 年;
    // (year-1)/4 是为了加上所有普通闰年的天数,因为普通闰年是每 4 年一润,
    // 而最后一个闰年是公元前 4 年,也就是距离输入年份最近的一个闰年;
    // (year-1)/100 是为了减去所有世纪闰年的天数,因为世纪闰年是每 100 年一润,
    // 但是在此基础上每 400 年又多一个闰年,所以需要加上 (year-1)/400。
    int days = ((year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
 
    // 根据余数判断星期几,分别输出中文星期值。
    switch (days) {
        case 0: printf("星期一\n"); break;
        case 1: printf("星期二\n"); break;
        case 2: printf("星期三\n"); break;
        case 3: printf("星期四\n"); break;
        case 4: printf("星期五\n"); break;
        case 5: printf("星期六\n"); break;
        case 6: printf("星期日\n"); break;
    }
 
    return 0;
}

  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值