神风堂人数
背景
《风云》里有详细记载,自己去看吧_…
描述
天下会评选一级弟子,(做出10题以上的有机会参加评选)。最后评选结果神风堂有超过P%但不足Q%的人被评上了(弟子一:听起来像是URAL上的1011。风:闭嘴!!!)。现在给你P和Q,你要算出神风堂最少有多少人。(数据弱了一点,所以好通过)。
格式
输入格式
两个实数P,Q。用空格隔开。每个数最多有两位小数。0.00<=p<q<=99.99
输出格式
神风堂最少的人数。
样例1
样例输入1
13 14.1
样例输出1
15
题意: 给定p、q两个数求一个最小的n,使得在 n ∗ p / 100 到 n ∗ q / 100 n * p/100到 n * q/100 n∗p/100到n∗q/100之间最少存在一个整数。
题解: 将p、q化到0~1的区间,从起开始递增,在每递增1便在初始值1和递增的最后这个值之间进行二分查找,用中间值占递增的最后的值来与p、q进行比较,当恰好比p大且比q小时,即为所求。详细逻辑见代码。
c++ AC 代码
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int r, l, mid, ans;
double p, q, num;
scanf("%lf %lf", &p, &q);
p = p / 100.0;
q = q / 100.0;
for (int i = 0;; i++)
{
l = 1;
r = i;
while (l <= r)
{
mid = (l + r) / 2;
num = double(mid) / double(i);
if (num > p)
{
r = mid - 1;
ans = mid;
}
else
l = mid + 1;
}
num = double(ans)/i;
if(num < q)
{
printf("%d\n",i);
return 0;
}
}
return 0;
}