Vijos 1041 — 神风堂人数

背景

《风云》里有详细记载,自己去看吧^_^…

描述

天下会评选一级弟子,(做出10题以上的有机会参加评选)。最后评选结果神风堂有超过P%但不足Q%的人被评上了(弟子一:听起来像是URAL上的1011。风:闭嘴!!!)。现在给你P和Q,你要算出神风堂最少有多少人。(数据弱了一点,所以好通过)。

题目链接

https://vijos.org/p/1041

输入格式

两个实数P,Q。用空格隔开。每个数最多有两位小数。0.00<=p<q<=99.99

输出格式

神风堂最少的人数。

样例输入

13 14.1

样例输出

15

题目分析

设神风堂最少的人数是i,则 i * p * 0.01i * q * 0.01之间至少有一个正整数。
由于将浮点数强制转换为int是不会四舍五入的,所以可以得到
(int)(i * q * 0.01) - (int)(i * p * 0.01) >= 1
题目中说超过P%但不足Q%,也就是说不包括P%和Q%
所以当i * q * 0.01i * p * 0.01恰好都是整数且两数之差为1时,这时是不可取的,因为两者之间并没有一个整数。
因此我们需要令i * q * 0.01减去一个数,令i * p * 0.01加上一个数,将刚才的特殊情况进行排除。这个数只要小于0.0001即可,因为 p% 和 q% 的精度是0.0001,只要小于0.0001就不会对正常的情况产生影响。

只要从1开始枚举,第一个符合条件的i就是答案。

AC代码

#include <stdio.h>
#include <math.h>
int main()
{
    int i;
    double p, q;
    scanf("%lf%lf", &p, &q);
    for (i = 1;; i++)
    {
        if ((int)(q * i / 100 - 0.00000001) - (int)(p * i / 100 + 0.00000001) >= 1)
        {
            printf("%d", i);
            break;
        }
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部