《黑书》第一道枚举题,最高的wa次数15次,可作为以后精度计算的典型

http://acm.timus.ru/problem.aspx?space=1&num=1011

题意:就是有个城市有市民当售票员,比例超过总人数的p%而不到q%,求这个城市至少多少人?

思路:很明显的枚举,只要存在第一个num*p/100==num*1/100的情况,就可以输出num,但是其精度害死人,具体看代码:

#include<iostream>

#include<stdio.h>

#include<string.h>

#include<math.h>

using namespace std;

int main()

{

	double n,m;

	while(scanf("%lf%lf",&n,&m)>0)

	{

		int num=1;

		n+=1e-10;           //要大于n 

		m-=1e-10;           //要小于m 

		int x=0,y=0;

		while(x==y)

		{

			num++;

			x=(int)num*n/100;

			y=(int)num*m/100;

			

		}

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

	}		

	return 0;

}

 上面是参考了别人思路的代码,下面是我自己思路的代码,当然,精度问题要是参考了别人的:

#include<iostream>

#include<stdio.h>

#include<string.h>

#include<math.h>

using namespace std;

int main()

{

	double n,m;

	while(scanf("%lf%lf",&n,&m)>0)

	{

		int num=1;

		n+=1e-6;           

		m-=1e-6;

		n/=100.0;         ;

		m/=100.0;

		for(num=2;;num++)

		{

			if(1.0/num<m)

			break;

		}

		int w=1;

		for(;num<=100000000;num++)

		{

			w=1;

			for(int j=1;j<=num;j++)

			{

				double tmp=(double)j/(double)num;

				if(tmp>m)

				break;

				if(n<tmp&&tmp<m)

				{

					w=0;

					break;

				}

			}

			if(w==0)

			break;

		}

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

	}		

	return 0;

}

 唉,别人的思路ac耗时0.031s,而我的思路耗时:0.210s......真为自己智商着急......

你可能感兴趣的:(枚举)