售票员问题——迷糊中……

fiveyes 2007-03-09 10:02:02
问题是这样的:
叶卡特琳堡有很多公共汽车,因此也有很多市民当上了售票员。如果在所有的市民中,售票员的人数超过P%而不到Q%,那么叶卡特琳堡至少有多少市民呢?例如,如果P=13而Q=14.1,那么至少有15个市民。

我有点糊涂,这题目的主要出发点是不是人的数量只能是整数呢?于是对邻售票员的人数从1开始进行枚举?(这道题在书里是属于枚举算法的)

例如,1/13*100约等于7.69,1/14.1*100约等于7.09,这两个数之间没有整数,所以试下一个,2/13*100约等于15.38,2/14.1*100约等于14.18,两数之间的整数为15,所以答案就是15?

我这种计算方法对吗?如果是这么算,编写具体的程序,应该让程序到什么时候结束呢?总不能无休止地计算下去?如果不是这么算,正确的方法应该怎样呢?(好象还存在精度问题,如果P和Q很接近的话?)
...全文
285 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GetTheWorld 2007-03-09
  • 打赏
  • 举报
回复
从使区间长度大于一的a 往下数 ?
GetTheWorld 2007-03-09
  • 打赏
  • 举报
回复
我觉得区间长度大于一应该是充分非必要的
GetTheWorld 2007-03-09
  • 打赏
  • 举报
回复
答案肯定不唯一

(100a/q,100a/p) 这个区间的整数 显然a->无穷时 b可以有任意多值

可能是求最小可能值
rongcanf 2007-03-09
  • 打赏
  • 举报
回复
我觉得楼主的想法是正确的
主要是通过整数作为约束条件
结束条件是两者之差大于1时
fiveyes 2007-03-09
  • 打赏
  • 举报
回复
最后弄出来这么个程序:

/*叶卡特琳堡有很多公共汽车,因此也有很多市民当上了售票员。
如果在所有的市民中,售票员的人数超过P%而不到Q%,那么
叶卡特琳堡至少有多少市民呢?例如,如果P=13而Q=14.1,
那么至少有15个市民。*/
//-------------------------------------------------------

#include <iostream>

using namespace std;

int MinBurghers(float P, float Q)
{
int Busmen = 1; //售票员人数初始化为1人
do
{
float min = Busmen / Q * 100; //当前售票员人数下,
float max = Busmen / P * 100; //市民的人数范围

if((int)min == (int)max) //范围内不存在整数
{
Busmen++; //售票员人数增1,继续下一次循环
}
else //范围内存在整数
{
return (int)max; //返回该整数
}
}while(Busmen<10000); //防止数据过大,设置一个限制
return -1;
}

int main()
{
float P, Q;
cout << "请输入售票员人数下限(%):";
cin >> P;
cout << "请输入售票员人数上限(%):";
cin >> Q;

int Result = MinBurghers(P, Q);
if(Result < 0)
{
cout << "数据超出范围!" << endl;
}
else
{
cout << "至少有" << Result << "个市民。" << endl;
}

return 0;
}
fiveyes 2007-03-09
  • 打赏
  • 举报
回复
谢谢,我觉得现在明白一点了。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧