| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2517 人关注过本帖
标题:1000 以内勾股数
只看楼主 加入收藏
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

少一个for 多了个do-while

这样是可以,但有的时候根本不需要搞那么复杂

[此贴子已经被作者于2006-5-5 6:38:42编辑过]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-05 06:38
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
这样也是可以的,这样题没太大必要
[CODE]
#include "stdio.h"
#include "math.h"

int main()
{
int a,b,c,n=0;
long sum;

for(a=3;a<1000;a++)
for(b=a+1;b<1000;b++)
{
sum=b*b+a*a;
c=sqrt(sum);
if(c<=1000 && c*c==sum)
{
n++;
printf("%5d%5d%5d,",a,b,c);
if(n%3==0)
putchar('\n');
}
}
return 0;
}

[/CODE]
C-Free XP

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-05 07:03
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

#include<stdio.h>

typedef unsigned long UI4;

int isN2(UI4 x)
{ UI4 y0,
y1=x/2;
do
{
y0=y1;
y1=(y0+x/y0)/2;
}
while(y1<y0);
return(y1*y1==x?y1:0);
}

/*输出1000以内的勾股数0<a<b<c<=1000*/
int main()
{ int len=0,ans=0;
UI4 a,a2,b,c,c2;
for(a=1;a<1000;a++)
{a2=a*a;b=a;
for(++b;(c2=a2+b*b)<=1e6;b++)
if(c=isN2(c2))/*如有警告,不理它*/
{ ans++;
len+=printf("%d,%d,%d ",a,b,c);
if(len>66)len=0,printf("\n");
}
}
printf("\ntotal: %d groups\n",ans);
return 0;
}
/*共计881组,最后一组696,697,985*/


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-05 07:17
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
程序大家都写那么多了,老实说,俺也写不出比楼上的好的了,
不过,建议控制循环变量用register,呵呵,
提高速度。

对不礼貌的女生收钱......
2006-05-05 10:04
飞跃无限
Rank: 1
等 级:新手上路
威 望:1
帖 子:180
专家分:0
注 册:2006-4-16
收藏
得分:0 
以下是引用soft_wind在2006-5-5 10:04:00的发言:
程序大家都写那么多了,老实说,俺也写不出比楼上的好的了,
不过,建议控制循环变量用register,呵呵,
提高速度。

用register,能把具体的实例贴出来么,我想看看到底是怎么用register变量。

2006-05-05 11:00
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

呵呵,int ==auto int
你在声明a,b,c(假设你用这三个数循环)
把 int a,b,c; 改成register int a,b,c;
此举意义是把它们放到CPU的寄存器上去,使运算速度加快


对不礼貌的女生收钱......
2006-05-05 11:05
飞跃无限
Rank: 1
等 级:新手上路
威 望:1
帖 子:180
专家分:0
注 册:2006-4-16
收藏
得分:0 
不过能感觉到速度有点上升了,呵。
2006-05-05 11:12
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
–★–这小子非常这么犟 13楼的程序运行结束用时 312毫秒

我12楼的用时 156毫秒, 正好是一半

大家可以试试,我就不发图了,麻烦(因为这题实在没必要争)

soft_wind 14楼建议不可取 register 变量不需要你指定,编译器有自动优化功能



叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-05 11:43
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
呵呵,版主说得有理,ANSI C标准确实允许编译器忽略register修饰符,有编译器自动优化,但其自动优化充其量是把变量放到高速缓冲存储里面,对于循环体语句较大的时候,循环次数较多的时候,定义一个寄存器变量是很有必要的,速度也会有所差别.
不知说得对否,版主再指教,呵呵

对不礼貌的女生收钱......
2006-05-05 11:55
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

我要去江边了。 得下了

越是循环次数多越没必要,因为优化时是把使用最频繁的(一个或者几个)变量定义为
registe变量

循环次数少的时候,你可以指定,但数目不能超过两个,而且不能对其进行取地址操作



叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-05 12:04
快速回复:1000 以内勾股数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026228 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved