Acwing_3619.日期_贵州大学考研机试题

一、题目描述

今天是 2012 年 4 月 12 日星期四,编写程序,输入今天开始到 12 月 31 日之间的任意日期,输出那一天是星期几。

题目地址3619. 日期 - AcWing题库icon-default.png?t=N7T8https://www.acwing.com/problem/content/3622/输入格式

共两行,第一行包含一个整数 m,表示询问日期的月份。
第二行包含一个整数 d,表示询问日期的为该月的第几天。
输出格式

输出询问日期是星期几。
注意,要用英文表示。
周一到周日的英文表示如下:

"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"

数据范围
4≤m≤12,
1≤d≤31,
保证日期合法。
输入样例:

5
20

输出样例:

Sunday

二、题目思路

语言:C语言

思路

  1. 定义一个数组,用来记录每个月第一日的下标,从4月份记起,表示距离4月1日有几天,如下:
    int days[9] = {0,30,61,91,122,153,183,214,244};

    解释:
    a、从4月起,共有9个月所以数组长度为9。第一个元素表示4月1日记为第一天,下标为0;第二个元素表示5月1日距离 4月1日 有30天,下标为30。
    b、这里为什么从4月1日记起?
          因为题目中说要从4月12日开始,而且可以得知4月1日正好是周日,一周有7天,那么也就是说(距离 4月1日 的天数 % 7 ) 就是星期几(如果是0,则表示周日) 。
    c、为什么只需要记录每个月的1号?
          因为输入月份和日期,可以根据日期计算出当前日期距离 4月1日 有几天。

  2. 计算输入的日期距离 4月1日 有几天。
    int res = (d + days[m-4] - 1) % 7;

    解释:
    d + days[m-4] - 1 表示 m月d日距离4月1日有几天。
    例:5月20日,20 + days[5-4] -1 = 20 + 30 - 1 = 49 , 其中20-1 表示该天到5月1日有几天,30表示5月1日到4月1日有几天,加起来就是。再 % 7,也就是有几个整周,发现有7个(七七四十九),没有余数,所以也是周日。

三、代码实现 

#include<bits/stdc++.h>
using namespace std;
int days[9] = {0,30,61,91,122,153,183,214,244};
char* ans[7] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int m,d;
int main(){
	scanf("%d",&m);
	scanf("%d",&d);
	int res = (d + days[m-4] - 1) % 7;
	
	printf("%s\n",ans[res]);
	
	return 0;
}

四、运行结果

有任何问题欢迎指出!!!祝大家学习进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值