首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大家帮忙看看哪里出错了,总是有两个数据异常。谢了。新手

2012-05-01 
大家帮忙看看哪里出错了,总是有两个数据错误。。。谢了。。。新手已知a (bc -1) / (b + c),给定a(1a60,000

大家帮忙看看哪里出错了,总是有两个数据错误。。。谢了。。。新手
已知a = (bc -1) / (b + c),给定a(1<=a<=60,000),求b和c,当有多个解时求(b + c)最小的解。

输出应满足b <= c。a,b,c都为正整数。
[code=C/C++][/code]
void main()
{
double a,b,c,rmd;
scanf("%lf",&a);
for(b=2*a+1;b>a;b--)
{
double prd=(a*b+1)/(b-a);
rmd=(a*b+1)-(b-a)*((int)prd);
if(rmd==0.0)
{
c=(a*b+1)/(b-a);
printf("%.lf\n%.lf\n",b,c);
}
}
}
[code=C/C++][/code]

[解决办法]
/*
 * 分析:
 * 把a作为已知量,根据原式尽量缩小b的取值范围,然后在该范围内遍历b,并
 * 判断对应的c是否满足条件。
 * bc / (b+c) = a + 1/(b+c);
 * 所以a < bc/(b+c) < a+1; 
 * 所以a(b+c) -bc - a^2 <0; 
 * 既(b-a)(a-c) < 0; 
 * 所以a < b < c或 b < c < a; 
 * 又因为a < bc/(b+c) < bc/(2b)
 * 所以c > 2a, a < b < c;
 * 因为bc/2c < bc/(b+c) < a+1;
 * 所以b < 2(a+1);
 * 综上所述a < b < 2(a+1);
 * */
程序如下:

C/C++ code
#include <stdio.h>#include <math.h>#define M 600000#define E 1e-10int main (void){ double a, b, c, minb, minc; minb = minc = 0; scanf ("%lf", &a); for (b=a+1; b < 2*(a+1); b++) {  c = (1+a*b) / (b-a);  if (b < c && fabs((int)c - c) < E)  {   if (fabs(minb) < E  && fabs(minc) < E ||     (b+c < minb+minc))   {    minb = b;    minc = c;   }  } } if (minb != 0 && minc != 0)  printf ("%.f\n%.f\n", minb, minc); return 0;} 

热点排行