[C/C++入门]【循环比较】13、鸡尾酒疗法(习题)

本题目来自自信息学奥赛考试题,主要是利用循环来计算概率的比较。

【题目描述】

鸡尾酒疗法,指“高效抗逆转录病毒治疗”。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式进行。假设鸡尾酒疗法的有效率为x,新疗法的有效率为y,如果y−x−大于55%,则效果更好,如果x−y−大于55%,则效果更差,否则称为效果差不多。下面给出n组临床对照实验,其中第一组采用鸡尾酒疗法,其他n−1−1组为各种不同的改进疗法。请写程序判定各种改进疗法效果如何。

提示:因实数在运算存储过程中会产生精度误差,故应按照题面直接与55%比较关系,而非与0.050.05比较关系。

【输入】

第一行为整数n(1<n≤201<≤20);其余n行每行两个整数,第一个整数是临床实验的总病例数(小于等于1000010000),第二个疗效有效的病例数。这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。

【输出】

有n−1−1行输出,分别表示对应改进疗法的效果:如果效果更好,输出better;如果效果更差,输出worse;否则输出same

【输入样例】

5
125 99 
112 89
145 99
99 97
123 98

【输出样例】

same
worse
better
same

 

解题思路

  • 我们往往先入为主,觉得第一行输入了n,后面我们就要循环n次。这样对我们的操作造成了不便,还需要判断是不是第一个,来判断鸡尾酒疗法的概率。因此我们可以换一种思维,把用一次的数据,直接创建变量。
  • 我们可以先输入鸡尾酒疗法的数据,求出鸡尾酒疗法的有效率x
  • 然后再循环,这个时候就从1开始了,依次输入其它疗法的数据,求出有效率y
  • 再计算x-y、y-x与5%之间的关系,判断哪种疗法更好或更差
  • 概率的公式是a/b *100.为了避免先算除法算到的数小,导致精度丢失,我们又知道一个公式里只有乘和除,那么顺序可以更换,我们就可以改成a*100/b;

解题步骤

//【循环比较】鸡尾酒疗法:来自信息学奥赛一本通 1072

#include <iostream>
using namespace std;

int main()
{
	//a:病例总数 b:疗效有效病例数
	int n, a, b;
	cin >> n;
	cin >> a >> b;
	double x = (double)b * 100 / a, y;//x:鸡尾酒疗法治愈率 y:其它疗法治愈率
	for (int i = 1; i < n; ++i)//输入n-1组数据
	{
		cin >> a >> b;//输入某疗法的病例总数及疗效有效病例数
		y = (double)b * 100 / a;
		if (y - x > 5)//y-x大于0.05 
			cout << "better" << endl;
		else if (x - y > 5)//x-y大于0.05 
			cout << "worse" << endl;
		else//fabs(x-y) < 0.05+EPS  x-y的绝对值小于等于0.05
			cout << "same" << endl;
	}
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值