搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 一个整数(
标题:
一个整数(
只看楼主
simpley
等 级:
新手上路
帖 子:262
专家分:0
注 册:2005-2-23
第
11
楼
得分:0
楼上的程序得出的最后一个数是错的
myQQ::445750010
2005-07-11 15:36
天使预备役
等 级:
论坛游民
威 望:
3
帖 子:670
专家分:10
注 册:2004-4-6
第
12
楼
得分:0
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
int main()//400
{
int num=0;
int ok=0;
while(num<400)
{
for(int i=0;i<400;i++)
if(i*i==num*num+168)
{
if((num*num-100)>0)
{
printf("%d",num*num-100);
ok=1;
break;
}
}
if(ok==1)
break;
num++;
}
return 0;
}
结果是21!
差点把你忘了...
2005-07-11 18:23
lhy198548
等 级:
新手上路
帖 子:16
专家分:0
注 册:2005-6-11
第
13
楼
得分:0
以下是引用
simpley
在2005-7-11 15:36:20的发言:
楼上的程序得出的最后一个数是错的
之所以产生这样的错误,是因为忽视了int类型的取值范围,其实由(a+b)*(b-a)==168与a<b可知必有b<168,这样就不会超出整型范围了
2005-07-11 19:37
kaikai
等 级:
新手上路
帖 子:236
专家分:0
注 册:2005-1-7
第
14
楼
得分:0
a*a+168=b*b
(b+a)(b-a)=168=2*2*2*3*7
b=a+c;
a*a+168=a*a+2ac+c*c
(2a+c)c=168 则c必为偶数,令c=2d,有
(2a+2d)*2d=168
(a+d)*d=42=2*3*7
d= 1, 2, 3,6, 7, 14, 21, 42, -1, -2, -3,-6, -7, -14, -21, -42
由于a=42/d-d,则有:
a=41, 19, 11, 1, -1, -11, -19, -41, -41, -19, -11, -1, 1, 11, 19, 41,
a*a-100=1581, 261, 21, -99, -99, 21, 261, 1581, 1581, 261, 21, -99, -99, 21, 261, 1581,
去掉重复的
答案是:1581, 261, 21, -99
Have you visit acm.tongji. lately?
2005-07-12 00:49
牛虻
等 级:
新手上路
威 望:
1
帖 子:472
专家分:0
注 册:2004-10-1
第
15
楼
得分:0
呵呵,kaikai都口算出来了
PS:10楼的思路确实不错
再PS:天使,帮你的程序改了一下
int main()
{ int num=0,i;
while(num<168)
{i=0;
while(i<168)
{if(i*i==num*num+168)
printf("\n%d",num*num-100);
i++;
}
num++;
}
getch();
return 0;
}
遗漏是由于if((num*num-100)>0)所造成;还有第二个break;
[此贴子已经被作者于2005-7-12 16:03:31编辑过]
土冒
2005-07-12 15:39
15
2/2页
1
2
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-19563-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 1.112980 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved