【习题解析】小杨的考试

1.1 题目:小杨的考试

题目来源:2023 年 12 月 CCF GESP C++ 一级 编程题 第一题

题目描述:
今天是星期 X,小杨还有 N 天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用 7 表示星期日)
输入:
输入 2 行,第一行一个整数 X( 1 < = X < = 7 1<=X<=7 1<=X<=7
第二行一个整数 N ( 1 < = N < = 364 1<=N<=364 1<=N<=364)。
输出:
输出一个整数,表示小杨考试那天是星期几。
特别提醒:
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1:
1
6
样例输出 1:
7
样例解释 1:
今天是星期 1,那么 6 天后就是星期日,星期日在本题中用 7 表示。
样例输入 2:
5
3
样例输出 2:
1
样例解释 2:
今天是星期 5,那么 3 天后就是星期 1。

1.2 题目分析

第一步:完成输入部分:
一共两行,第一行一个整数 X,第二行一个整数 N。
N 和 X 数据范围分别是 1 < = X < = 7 1<=X<=7 1<=X<=7 1 < = N < = 364 1<=N<=364 1<=N<=364,在 int 范围内。
所以,要注意输入的顺序哦,先 X 再 N。

int N,X;
cin>>X>>N;

输入很简单完成!
通过分析 X 表示星期 X,N 表示过了 N 天。
按样例输入的意思,如果是 5 3,则代表星期五,过了 3 天。
如下图中的红色 5,过 3 天,即绿色,到了 8,对应即星期一,输出 1。

解析

发现刚好 5+3 = 8,8 ÷ 7 的余数刚好是 1,刚好也是代表样例输出,即 (N+X)%7。
但有个缺点:余数只有 0~6,并不能代表星期日。
而余数 0 代表的也刚好是 7,即星期日。
所以可以对 0 进行特殊判断。

int ans;//最后结果
ans=(N+X)%7;
if(ans>=1&&ans<=6)
{
	cout<<ans;
}
else
{
	cout<<7;
}

即完成!
这种方法,代码量可能会比较大,所以可以根据数学规律进行解答,即 (N + X - 1) % 7 + 1 。
直接输出这个公式即可。

int ans;
ans=(N + X - 1) % 7 + 1;
cout<<ans;

1.3 参考代码

1.3.1 方法一

#include<iostream>
using namespace std;
int main()
{
	int N,X;
	cin>>X>>N;
	int ans;//最后结果
	ans=(N+X)%7;
	if(ans>=1&&ans<=6)
	{
		cout<<ans;
	}
	else
	{
		cout<<7;
	}
	return 0;
}

1.3.2 方法二

#include<iostream>
using namespace std;
int main()
{
	int N,X;
	cin>>X>>N;
	int ans;
	ans=(N + X - 1) % 7 + 1;
	cout<<ans; 
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员莫小特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值