| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6514 人关注过本帖
标题:很简单的一道题,计算勾股数(100以内)
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:3 
很简单的一道题,计算勾股数(100以内)
要求去除重复的勾股数 比如 3 4 5 和4 3  5 这算一组

测试案例输出:

程序代码:

 3 ^2 +  4 ^2 =  5 ^2

 5 ^2 + 12 ^2 = 13 ^2

 6 ^2 +  8 ^2 = 10 ^2

 7 ^2 + 24 ^2 = 25 ^2

 8 ^2 + 15 ^2 = 17 ^2

 9 ^2 + 12 ^2 = 15 ^2

 9 ^2 + 40 ^2 = 41 ^2
10 ^2 + 24 ^2 = 26 ^2
11 ^2 + 60 ^2 = 61 ^2
12 ^2 + 16 ^2 = 20 ^2
12 ^2 + 35 ^2 = 37 ^2
13 ^2 + 84 ^2 = 85 ^2
14 ^2 + 48 ^2 = 50 ^2
15 ^2 + 36 ^2 = 39 ^2
16 ^2 + 30 ^2 = 34 ^2
16 ^2 + 63 ^2 = 65 ^2
18 ^2 + 24 ^2 = 30 ^2
18 ^2 + 80 ^2 = 82 ^2
20 ^2 + 21 ^2 = 29 ^2
20 ^2 + 48 ^2 = 52 ^2
21 ^2 + 28 ^2 = 35 ^2
21 ^2 + 72 ^2 = 75 ^2
24 ^2 + 32 ^2 = 40 ^2
24 ^2 + 45 ^2 = 51 ^2
24 ^2 + 70 ^2 = 74 ^2
27 ^2 + 36 ^2 = 45 ^2
28 ^2 + 45 ^2 = 53 ^2
30 ^2 + 72 ^2 = 78 ^2
32 ^2 + 60 ^2 = 68 ^2
33 ^2 + 44 ^2 = 55 ^2
35 ^2 + 84 ^2 = 91 ^2
36 ^2 + 48 ^2 = 60 ^2
39 ^2 + 80 ^2 = 89 ^2
40 ^2 + 42 ^2 = 58 ^2
42 ^2 + 56 ^2 = 70 ^2
48 ^2 + 55 ^2 = 73 ^2
48 ^2 + 64 ^2 = 80 ^2
54 ^2 + 72 ^2 = 90 ^2
57 ^2 + 76 ^2 = 95 ^2
60 ^2 + 63 ^2 = 87 ^2
65 ^2 + 72 ^2 = 97 ^2
2015-01-09 15:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我的代码表示很复杂,循环次数太多,
我感觉主要是剔除重复的勾股数,比较麻烦一些,
程序代码:
#include<stdio.h>

int main()
{
    int a,b,c;
    int i;
    int t[10000]={0};
    for(a=3;a<100;a++)
    {
        for(b=a+1;b<100;b++)
        {
            for(c=b+1;c<a+b && c<100;c++)
            {
                if(a*a+b*b==c*c) t[c]++;
            }
        }
    }
    for(a=3;a<100;a++) 
    {
        for(b=a+1;b<100;b++)
        {
            for(i=0;i<10000;i++)
            {
                if(t[i]>0 && a*a+b*b==i*i)
                {
                    printf("%2d ^2 + %2d ^2 = %2d ^2\n",a,b,i);
                    t[i]=0;
                }
            }
        }
    }
    return 0;
}


[ 本帖最后由 wp231957 于 2015-1-9 15:42 编辑 ]

DO IT YOURSELF !
2015-01-09 15:06
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用rjsp在2015-1-9 15:19:07的发言:

for( a = 1; ……
    for( b = a+1; ……
        for( c = b+1; ……
行么?


结果没啥区别,不过循环次数估计少了不少,具体少了多少 我还不会算,估计也不是指数级别的

DO IT YOURSELF !
2015-01-09 15:23
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
3楼和5楼所做的修改都是减少重复循环次数

我主要想看看剔除重复 例如 3 4 5, 4 3 5, 5 12 13 ,12  5 13 大家是如何做的,我以前有一个不成形的想法,但是最终没有实现,反而这个想法得到了实现

DO IT YOURSELF !
2015-01-09 15:45
快速回复:很简单的一道题,计算勾股数(100以内)
数据加载中...
 
   



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

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