您的位置:首页 > 其它

URAL 1011 Conductors

2014-04-25 14:47 204 查看
题目大意:

叶卡捷琳堡公共汽车多,所以售票员也多,假设售票员人数大于城市人口的P%小于Q(0.01 ≤ P, Q ≤ 99.99,即精度为4位)。
现只有一个测例,给出P和Q,求城市可能的最小人口数。
题目链接

注释代码:

/*
* Problem ID : URAL 1517 Freedom of Choice
* Author     : Lirx.t.Una
* Language   : Visual C 2010
* Run Time   : 0.015
* Run Memory : 136 KB
*/

#include <stdio.h>
#include <math.h>

//经测试的最低精度
#define	EPS		1E-4

int
main() {

double	p, q;//两个系数
double	ori;//original,原值
double	top;//经ceil或floor处理过的值

int		ns;//number of salesmen,售票员可能的人数
int		lft, rht;//城市总人数的区间,即总人数∈[lft, rht]

//思路:
//求范围 ns/q < total number of people in the city < ns/p
//取整后得到 lft ≤ tot ≤ rht
//只有当rht ≥ lft时tot有最优解lft
//ns从1开始向上枚举
//遇到的第一个解必定是最优解

scanf("%lf%lf", &p, &q);

ns = 1;
do {

ori = (double)ns * 100.0 / q;
top = ceil(ori);
if ( fabs(top - ori) < EPS )//判断浮点精度
lft = (int)top + 1;
else
lft = (int)top;

ori = (double)ns * 100.0 / p;
top = floor(ori);
if ( fabs(ori - top) < EPS )//判断浮点精度
rht = (int)top - 1;
else
rht = (int)top;

ns++;

} while ( lft > rht );

printf("%d\n", lft);

return 0;
}


无注释代码:

#include <stdio.h>
#include <math.h>

#define	EPS		1E-4

int
main() {

double	p, q;
double	ori;
double	top;

int		ns;
int		lft, rht;

scanf("%lf%lf", &p, &q);

ns = 1;
do {

ori = (double)ns * 100.0 / q;
top = ceil(ori);
if ( fabs(top - ori) < EPS )
lft = (int)top + 1;
else
lft = (int)top;

ori = (double)ns * 100.0 / p;
top = floor(ori);
if ( fabs(ori - top) < EPS )
rht = (int)top - 1;
else
rht = (int)top;

ns++;

} while ( lft > rht );

printf("%d\n", lft);

return 0;
}


单词解释:

conductor:n, 售票员,导体

naked:adj, 裸体的,直率的

Ekaterinburg:叶卡捷琳堡,城市名(苏联城市)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: