程序练习2016.10.21

2 篇文章 0 订阅

        以前听过的一道题目,设公元1年1月1日是星期一,考虑闰年的情况,随意输入年月日,返回星期几。

        刚拿到题目觉得挺简单,返回星期,刚开始想直接在输入的那一年里计算,不用算其它年份,来返回星期,然后试了一下总是不能确定那一年的星期,因为要考虑闰年,以前的年份中的闰年数量返回后还要考虑用户输入年份是否是闰年,是闰年的话日期在2月29号前还是后,考虑的东西太多,容易出错,然后就换一个思路想,,因为闰年的缘故每年的天数都是会变得,每月的天数也是会变得,那不变的就剩下星期了,一周七天是不会变的,既然公元1年1月1日是星期一,那直接算出公元1年1月1日到用户输入的日期一共多少天和7取余就可以了,代码如下:

#include <iostream>
using namespace std;

int main()
{
	int year, mouth, day, week, Ycount = 0, Mcount = 0;
	int DYear, MDay, AllDay;
	cout << "请输入年:";
	cin >> year;
	cout << "请输入月:";
	cin >> mouth;
	cout << "请输入日:";
	cin >> day;
	if (year > 1)
	{
		for (int i = 1; i < year; i++)
		{
			if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
				Ycount++;
		}
		DYear = year * 365 + Ycount;
	}
	else
		DYear = 0;

	int Mouth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	for (int i = 0; i < mouth-1; i++)
	{
		Mcount += Mouth[i];
	}
	
	AllDay = DYear + Mcount + day;
	cout << AllDay << endl;
    week = AllDay % 7;
	if(week==0)
		cout << year << "年" << mouth << "月" << day << "日是星期日" << endl;
	else
	    cout << year << "年" << mouth << "月" << day << "日是星期" << week << endl;
}


以下为Python实现:

def week(year, mouth, day):

    Ycount = 0
    if year > 1:
        for i in range(1, year):
            if i % 4 ==0 and i % 100 != 0 or i % 400 == 0:
                Ycount += 1 

        Dyear = year * 365 + Ycount
    else:
        Dyear = 0

    Mouth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    Mcount = 0
    for i in range(mouth-1):
        Mcount += Mouth[i]

    AllDay = Dyear + Mcount + day
    week = AllDay % 7
    
    if week == 0:
        print('%d年%d月%d日是星期日' % (year,mouth,day))

    else:
        print('%d年%d月%d日是星期%d' % (year, mouth, day, week))

def main():
    while True:
        
        year = int(input('请输入年:'))
        mouth = int(input('请输入月:'))
        day = int(input('请输入日:'))
        week(year, mouth, day)


if __name__ == '__main__':
    main()
    



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值