HNU【拳王阿里】

这是一个关于计算拳击手阿里比赛天数的问题,给定开始和结束的星期以及天数范围,程序需判断是否能唯一确定比赛总天数。输入包括开始和结束的星期字符串及天数范围,输出可能的结果。提供的C++代码示例通过循环和判断解决此问题。
摘要由CSDN通过智能技术生成

【问题描述】

       阿里是上个世纪美国最著名的拳击手,阿里在20年的时间里多次获得重量级拳王称号。不过不幸的是,他在之后患上了帕金森氏病。他参加了许多比赛,多到连自己都数不清了。
    有这么一段时间,他总是参加各种不同的比赛,以至于他自己也不知道从第一场比赛开始到最后一场比赛结束到底用了多长时间。他只记得比赛的第一天是星期几(S),最后一场比赛的最后一天是星期几(E)。他还记得比赛的总天数(包括第一和最后一天)不少于L天,也不多于R天。给定S和E,能否唯一确定参加比赛总天数(包含该段时间内比赛间的间隔天数)?

【输入形式】

       输入的第一行包含一个整数T,代表测试数据的组数。接下来是 T 组数据。每组数据仅有一行,首先包含两个字符串S和E,然后包含两个整数L和R。

    • 1 ≤ T ≤ 10,000        1 ≤ L ≤ R ≤ 100

    • S, E ∈ {“monday”,“tuesday”,“wednesday”,“thursday”,“friday”,“saturday”, “sunday”}

【输出形式】

    对于每组数据:

    如果不存在满足条件的天数,输出一行“impossible”;
    如果存在多个满足条件的天数,输出一行“many”;
    否则,输出一行,包含一个整数,代表唯一满足条件的天数。

【样例输入】

    3
    saturday sunday 2 4
    monday wednesday 1 20
    saturday sunday 3 5

【样例输出】

    2
    many
    impossible
【代码详解】

#include<iostream>
#include<cmath>
using namespace std;
void compare(int T)
{
	for(int i=0;i<T;i++)
	{
		string S,E; int L=0,R=0;
		cin>>S>>E>>L>>R;

		string a[7]={"monday","tuesday","wednesday",
		"thursday","friday","saturday","sunday"}; 
		
		int day=0,b=0;//关键数进行天数的计算 
		int count=0;int j=1;
	
		int l=0,r=0;
		for(int i=0;i<7;i++)
		{
			if(S==a[i])
			l=i;
			if(E==a[i])
			r=i;//记录左右数字
		    b=r-l+1;//不用取绝对值,情况不一样 
		}//先把初始的b求出来 
		while(b<=R)
		{
		if(L<=b&&b<=R)//如果在此区间内(之前像一个傻逼写成了L<=b<=R) 
	    {
		count++;
		day=b;
		}
	    b=b+7;//错误点每次累加7即可,真的傻逼 
		} 
		//
		
		if(count==0)//进行三种情况的分类比较 
		cout<<"impossible"<<endl;
		else if(count>1)
		cout<<"many"<<endl;
		else  
		cout<<day<<endl;
		 
	 } 
}
int main()
{	int T;
	cin>>T;//先进行数据的输入
	compare(T);}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值