精华内容
下载资源
问答
  • 勾股数论文 勾股数的构造方法 教你如何构造勾股数
  • 勾股数

    千次阅读 2019-05-26 22:20:00
    勾股数 需求分析 该项目需求是要判断一个数是否满足勾股数的各个条件,并输出判断结果。勾股数:勾股数就是可以构成一个直角三角形三边的一组正整数,满足勾股定理:直角三角形两条直角边a、b的平方和等于斜边c的平方...

    勾股数

    需求分析

    该项目需求是要判断一个数是否满足勾股数的各个条件,并输出判断结果。勾股数:勾股数就是可以构成一个直角三角形三边的一组正整数,满足勾股定理:直角三角形两条直角边a、b的平方和等于斜边c的平方(a²+b²=c²)(参考百度百科对勾股数的解释)

    功能设计

    • 基本功能:查找、判断并输出勾股数
    • 扩展功能:输入一个数,判断1到该数的区间内是否存在勾股数,根据判断输出相应的结果

    设计实现

    首先定义两个变量a,b,存储用户输入的区间头和尾,之后使用for循环遍历区间,对每一个数进行核心代码中的运算,逐个进行查找,如果找到满足的就输出,否则继续查找直至全部遍历。

    测试运行

    正常情况

    输入图片说明

    异常情况

    输入图片说明

    核心代码

    
            for (int i=1;i<=a ;i++) {   //遍历1到a
                for(int j=i;j<=a;j++){    //在i到a中进行遍历,可避免重复的组出现
                    for(int k=j;k<=a;k++){      //在j到a中进行遍历,这样可以避免重复发生
                        if((i*i+j*j) == k*k){      //如果三者满足勾股定理
                            System.out.println(i+" "+j+" "+k);   //输出
                            count++;      //计数变量加一
                        }
                    }
                }
            }
    
    

    总结

    本程序的关键是判断每个数是否有相应的两个数使得他们满足勾股定理,所以可以使用for循环进行遍历,抓住这一步就可以完成程序的编写了。

    PSP

    步骤 耗时(min) 百分比
    需求分析 10 22.2%
    设计 5 11.1%
    代码实现 15 33.3%
    测试 5 11.1%
    分析总结 10 22.2%

    转载于:https://www.cnblogs.com/20175317zrw/p/10926720.html

    展开全文
  • 如3、4、5是一组勾股数,且有 ,5,12, 13为一组勾股数,7, 24, 25为一组勾股数,(二)如果 为一组勾股数,则 也是一组勾股数,其中n为自然数例 3, 4,5是一组勾股数,那么6、8、10也是一组勾股数9、12、15也是...

    27 回复

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #2

    zhaofeng2007-03-16 18:45

    (一) 如果 是一个大于1的奇数, 为两个连续自然数,且有 ,则为一组勾股数.如3、4、5是一组勾股数,且有 ,

    5,12, 13为一组勾股数,

    7, 24, 25为一组勾股数,

    (二)如果 为一组勾股数,则 也是一组勾股数,其中n为自然数

    例 3, 4,5是一组勾股数,那么

    6、8、10也是一组勾股数

    9、12、15也是一组勾股数

    9186a0bfc8435915598d9c0a11f3741c.png

    #3

    nuciewth2007-03-16 18:55

    LS的这些条件是什么?

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #4

    高达2007-03-16 19:00

    时间复杂度尽量小

    有很大一部分都是 人工完成有关计算的

    或 寻找独特的规律来解决问题

    193b76e590c89a7c47eea276b47767d1.png

    #5

    I喜欢c2007-03-16 19:02

    穷举法最简单...

    想想其他的!

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #6

    jiangliangju2007-03-16 19:36

    #include "stdio.h"

    main()

    { int a,b,c;

    for(a=1;a<=100;a++)

    for(b=1;b<=100;b++)

    for(c=1;c<=100;c++)

    if(a*a+b*b==c*c&&a

    printf("%d\t%d\t%d\n",a,b,c);

    em02.gif

    system("pause");

    }

    这是我的代码

    15678b147fd621ec175e76ab4a2309a8.gif,有没有人能让他更简便一点,我现在想不出更好的判断方法.

    46914278917d415428f969b3c454927a.gif

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #7

    zhaofeng2007-03-16 19:43

    #include "math.h"

    #include "string.h"

    void GetPythafromanynaturalNum(int nn)

    {

    int m =0,n = 0;

    int m_max=0,n_max=0;

    int x=0,y=0,z=0;

    m_max = sqrt(1.0*nn);

    n_max = sqrt(1.0*nn/2);

    for (n=1;n

    for(m=n+1;m

    {

    x=m*m-n*n;

    y= 2*m*n;

    z=m*m+n*n;

    printf("The absolute value of x=%d y=%d z=%d \n", x,y,z);

    }

    }

    void main(void)

    {

    int naturalnum;

    naturalnum =100;

    GetPythafromanynaturalNum(naturalnum);

    }

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #8

    zhaofeng2007-03-16 19:44

    刚写好

    我的msn:yangzhou_zf@hotmail.com

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #9

    zhaofeng2007-03-16 19:49

    我不知道全不全

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #10

    jiangliangju2007-03-16 19:52

    请问楼上的,你这样算出来的勾股数有33组,而我的有55组, 是不是你落了什么,还是我多了

    a4d5f4c458f4f7d8f144815bcad6ceb4.png

    #11

    pinglideyu2007-03-16 19:56

    #include

    #define N 100

    void main()

    {

    int i,j,k;

    int t=0;

    printf("打印%d以内所有的勾股数:\n",N);

    for (i=1;i<=N;i++)

    {

    for (j=1;j<=N;j++)

    {

    for (k=1;k<=N;k++)

    {

    if ((i*i+j*j==k*k)&&(i

    printf("%d %d %d\n",i,j,k);

    }

    }

    }

    }

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #12

    jiangliangju2007-03-16 19:58

    The absolute value of x=3 y=4 z=5

    The absolute value of x=8 y=6 z=10

    The absolute value of x=15 y=8 z=17

    The absolute value of x=24 y=10 z=26

    The absolute value of x=35 y=12 z=37

    The absolute value of x=48 y=14 z=50

    The absolute value of x=63 y=16 z=65

    The absolute value of x=80 y=18 z=82

    The absolute value of x=5 y=12 z=13

    The absolute value of x=12 y=16 z=20

    The absolute value of x=21 y=20 z=29

    The absolute value of x=32 y=24 z=40

    The absolute value of x=45 y=28 z=53

    The absolute value of x=60 y=32 z=68

    The absolute value of x=77 y=36 z=85

    The absolute value of x=7 y=24 z=25

    The absolute value of x=16 y=30 z=34

    The absolute value of x=27 y=36 z=45

    The absolute value of x=40 y=42 z=58

    The absolute value of x=55 y=48 z=73

    The absolute value of x=72 y=54 z=90

    The absolute value of x=9 y=40 z=41

    The absolute value of x=20 y=48 z=52

    The absolute value of x=33 y=56 z=65

    The absolute value of x=48 y=64 z=80

    The absolute value of x=65 y=72 z=97

    The absolute value of x=11 y=60 z=61

    The absolute value of x=24 y=70 z=74

    The absolute value of x=39 y=80 z=89

    The absolute value of x=56 y=90 z=106

    The absolute value of x=13 y=84 z=85

    The absolute value of x=28 y=96 z=100

    The absolute value of x=45 y=108 z=117

    33'd:\mplay.com'

    请按任意键继续. . .为什么会有117呢,大于100什么意思

    8f3a92fe7b9f8b4314e0d30853af843b.png

    #13

    neverTheSame2007-03-16 19:59

    我的思路是这样的:

    勾股数是满足:a的平方+b的平方=c的平方

    为了保证不重复,

    for(a=1;a

    for(b=a;b

    {再验证这三个数能不能成立}

    但为了少做一些不必要的循环次数

    a最大到 sqrt(2)*(NUM)/2,

    for(a=1;a

    在做验证这一步时:

    先让一个数=sqrt(a的平方+b的平方),

    再验证这个数的平方?=a的平方+b的平方;

    #include

    #include

    #include

    int check(int,int);

    int main(void)

    {

    int number1,number2,number3;

    int control=(int)(sqrt(2)*50);

    for(number1=1;number1

    for(number2=number1;number2<100;number2++)

    {

    number3=check(number1,number2);

    if(number3!=0)

    printf("%d %d %d \n",number1,number2,number3);

    }

    getch();

    return 0;

    }

    int check(int num1,int num2)

    {

    int num3=0;

    int sqrtData=num1*num1+num2*num2;

    num3=(int)sqrt(sqrtData);

    if(num3<100)

    {

    if(num3*num3==sqrtData)

    return num3;

    else

    return 0;

    }

    else

    return 0;

    }

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #14

    zhaofeng2007-03-16 20:03

    我在优化以下!

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #15

    lhj20052007-03-16 21:13

    谁能加个计数器COUNT,计算下,100以内的勾谷数个数???

    8f3a92fe7b9f8b4314e0d30853af843b.png

    #16

    neverTheSame2007-03-16 21:33

    5 12 13

    6 8 10

    7 24 25

    8 15 17

    9 12 15

    9 40 41

    10 24 26

    11 60 61

    12 16 20

    12 35 37

    13 84 85

    14 48 50

    15 20 25

    15 36 39

    16 30 34

    16 63 65

    18 24 30

    18 80 82

    20 21 29

    20 48 52

    21 28 35

    21 72 75

    24 32 40

    24 45 51

    24 70 74

    25 60 65

    27 36 45

    28 45 53

    30 40 50

    30 72 78

    32 60 68

    33 44 55

    33 56 65

    35 84 91

    36 48 60

    36 77 85

    39 52 65

    39 80 89

    40 42 58

    40 75 85

    42 56 70

    45 60 75

    48 55 73

    48 64 80

    51 68 85

    54 72 90

    57 76 95

    60 63 87

    65 72 97

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #17

    zhaofeng2007-03-16 21:38

    pinglideyu

    能不能把你的55组也贴上来,我想验证一下

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #18

    喝酸奶的鱼2007-03-16 21:53

    neverTheSame能不能解释一下为什么“a最大到 sqrt(2)*(NUM)/2”。

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #19

    zhaofeng2007-03-16 22:04

    设定3个数 a b c

    a*a +b*b= c*c

    三个数是不等的

    所以a>b或b>a

    所以假设a=b

    a*a+b*b=c*c

    也就是 a*a+a*a=c*c 同理c*c =num

    2*a*a =num

    a=sqrt(mun/2)

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #20

    flmls2007-03-16 22:56

    谁会设置一个计数器啊,

    放在程序中,效果是最后计算出 一共有几个符合条件的 勾古

    8f3a92fe7b9f8b4314e0d30853af843b.png

    #21

    neverTheSame2007-03-16 23:35

    以下是引用喝酸奶的鱼在2007-3-16 21:53:22的发言:

    neverTheSame能不能解释一下为什么“a最大到 sqrt(2)*(NUM)/2”。

    为了确保不重复计,

    后面的b要大于等于a,

    也就可以说:

    a2(a的平方) b2(b的平方) c2(c的平方)

    a2+b2>=2*a2

    c2>=a2+b2

    c2>=2*a2

    由于c<100

    所以,100的平方大于等于 2*a2

    a最大到 sqrt(2)*(NUM)/2

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #22

    renwoxing2007-03-17 10:31

    #include

    main()

    {int a,b,c,i=0;

    for(a=1;a<=100;a++)

    {for(b=1;b<=100;b++)

    for(c=1;c<=100;c++)

    if(a*a+b*b==c*c&&a<=b&&b

    {i++;

    printf("a%d=%d,b%d=%d,c%d=%d\n",i,a,i,b,i,c);

    }

    }

    }

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #23

    爱以走远2007-03-17 14:29

    以下是引用I喜欢c在2007-3-16 19:02:49的发言:

    穷举法最简单...

    想想其他的!

    说的时间要小的嘛 你都是3重循环哦 代码是简单

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #24

    爱以走远2007-03-17 14:30

    引用错拉哈 不好意思

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #25

    zhanghuan_102007-03-17 14:36

    6楼的还有等腰直角三角形呢!

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #26

    喝酸奶的鱼2007-03-17 20:18

    以下是引用neverTheSame在2007-3-16 23:35:12的发言:

    为了确保不重复计,

    后面的b要大于等于a,

    也就可以说:

    a2(a的平方) b2(b的平方) c2(c的平方)

    a2+b2>=2*a2

    c2>=a2+b2

    c2>=2*a2

    由于c<100

    所以,100的平方大于等于 2*a2

    a最大到 sqrt(2)*(NUM)/2

    谢谢诶 ,明白了!

    87c2dc896857db0d96afa48878d6e49f.png

    #27

    aphase2010-05-16 00:32

    虽然是旧帖

    但是发现了错误

    将NUM定义为10试试

    只出现了3.4.5

    而没有6.8.10

    2ebef30d2f576db8dbe620d13b89a96b.gif

    #28

    lucky5635912010-05-16 07:34

    I do not know

    1

    展开全文
  • 问题描述求150以内的所有勾股数。所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。问题分析根据“勾股数”定义,所求三角形三边应满足条件 a2 + b2 = c2。可以在所求范围内利用穷举法找出满足条件...

    问题描述

    求150以内的所有勾股数。

    所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。

    问题分析

    根据“勾股数”定义,所求三角形三边应满足条件 a2 + b2 = c2。可以在所求范围内利用穷举法找出满足条件的数。

    算法分析

    采用穷举法求解时,最容易想到的一种方法是利用3个循环语句分别控制变最a、b、c的取值范围,第1层控制变量a,取值范围是1〜100。在a值确定的情况下再确定b值,即第2层控制变量b,为了避免结果有重复现象,b的取值范围是a+1〜150。a、b的值已确定,利用穷举法在b+1〜150范围内一个一个的去比较,看当前c值是否满足条件 a2 + b2 = c2,若满足,则输出当前a、b、c的值,否则继续寻找。主要代码如下:

    //...

    for(a=l; a<=100; a++)  /*确定a的取值*/

    for(b=a+l; b<=100; b++)  /*确定b的取值*/

    for(c=b+l; c<=100; c++)  /*确定c的取值*/

    if(a*a+b*b==c*c)

    printf ("%d\t%d\t%d\n", a, b, c)  /*判断三个变量是否满足勾股数条件*/

    //...

    但是上述算法的效率比较低,根据 a2 + b2 = c2 这个条件,在a、b值确定的情况下,没必要再利用循环一个一个去寻找c值。若a、b、c是一组勾股数,则 a2 + b2 的平方根一定等于c,c的平方应该等于a、b的平方和,所以可将的平方根赋给c,再判断c的平方是否等于。根据“勾股数”定义将变量定义为整型,a2 + b2 的平方根不一定为整数, 但变量c的类型为整型,将一个实数赋给一个整型变量时,可将实数强制转换为整型(舍弃小数点之后的部分)然后再赋值,这种情况下得到的c的平方与原来的的值肯定不相等,所以可利用这一条件进行判断。

    下面是完整的代码:

    #include

    #include

    int main()

    {

    int a, b, c, count=0;

    printf("150以内的勾股数有:\n");

    printf("  a    b    c      a    b    c      a    b    c      a    b    c\n");

    /*求150以内勾股数*/

    for(a=1; a<=150; a++)

    for(b=a+1; b<=150; b++)

    {

    c=(int)sqrt(a*a+b*b);  /*求c值*/

    if(c*c==a*a+b*b && a+b>c && a+c>b && b+c>a && c<=150)  /*判断c的平方是否等于a2+b2*/

    {

    printf("%4d %4d %4d    ", a, b, c);

    count++;

    if(count%4==0)  /*每输出4组解就换行*/

    printf("\n");

    }

    }

    printf("\n");

    return 0;

    }

    运行结果:

    150以内的勾股数有:

    a    b    c      a    b    c      a    b    c      a    b    c

    3    4    5        5  12  13        6    8  10        7  24  25

    8  15  17        9  12  15        9  40  41      10  24  26

    11  60  61      12  16  20      12  35  37      13  84  85

    14  48  50      15  20  25      15  36  39      15  112  113

    16  30  34      16  63  65      17  144  145      18  24  30

    18  80  82      20  21  29      20  48  52      20  99  101

    21  28  35      21  72  75      22  120  122      24  32  40

    24  45  51      24  70  74      24  143  145      25  60  65

    27  36  45      27  120  123      28  45  53      28  96  100

    30  40  50      30  72  78      32  60  68      32  126  130

    33  44  55      33  56  65      35  84  91      35  120  125

    36  48  60      36  77  85      36  105  111      39  52  65

    39  80  89      40  42  58      40  75  85      40  96  104

    42  56  70      42  144  150      44  117  125      45  60  75

    45  108  117      48  55  73      48  64  80      48  90  102

    48  140  148      50  120  130      51  68  85      51  140  149

    54  72  90      55  132  143      56  90  106      56  105  119

    57  76  95      60  63  87      60  80  100      60  91  109

    63  84  105      64  120  136      65  72  97      66  88  110

    66  112  130      69  92  115      72  96  120      75  100  125

    78  104  130      80  84  116      81  108  135      84  112  140

    87  116  145      88  105  137      90  120  150      96  110  146

    100  105  145

    a241efeb16276e0b874fe465cd5a9bb0.png

    0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • 问题描述求100以内的所有勾股数。所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。问题分析根据“勾股数”定义,所求三角形三边应满足条件 a2 + b2 = c2。可以在所求范围内利用穷举法找出满足条件...

    问题描述

    求100以内的所有勾股数。

    所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。

    问题分析

    根据“勾股数”定义,所求三角形三边应满足条件 a2 + b2 = c2。可以在所求范围内利用穷举法找出满足条件的数。

    算法分析

    采用穷举法求解时,最容易想到的一种方法是利用3个循环语句分别控制变最a、b、c的取值范围,第1层控制变量a,取值范围是1〜100。在a值确定的情况下再确定b值,即第2层控制变量b,为了避免结果有重复现象,b的取值范围是a+1〜100。a、b的值已确定,利用穷举法在b+1〜100范围内一个一个的去比较,看当前c值是否满足条件 a2 + b2 = c2,若满足,则输出当前a、b、c的值,否则继续寻找。主要代码如下:

    //...

    for(a=l; a<=100; a++) /*确定a的取值*/

    for(b=a+l; b<=100; b++) /*确定b的取值*/

    for(c=b+l; c<=100; c++) /*确定c的取值*/

    if(a*a+b*b==c*c)

    printf ("%d\t%d\t%d\n",a,b,c) /*判断三个变量是否满足勾股数条件*/

    //...

    但是上述算法的效率比较低,根据 a2 + b2 = c2 这个条件,在a、b值确定的情况下,没必要再利用循环一个一个去寻找c值。若a、b、c是一组勾股数,则 a2 + b2 的平方根一定等于c,c的平方应该等于a、b的平方和,所以可将的平方根赋给c,再判断c的平方是否等于。根据“勾股数”定义将变量定义为整型,a2 + b2 的平方根不一定为整数, 但变量c的类型为整型,将一个实数赋给一个整型变量时,可将实数强制转换为整型(舍弃小数点之后的部分)然后再赋值,这种情况下得到的c的平方与原来的的值肯定不相等,所以可利用这一条件进行判断。

    下面是完整的代码:

    #include

    #include

    int main()

    {

    int a,c,count=0;

    printf("100以内的勾股数有:\n");

    printf(" a b c a b c a b c a b c\n");

    /*求100以内勾股数*/

    for(a=1; a<=100; a++)

    for(b=a+1; b<=100; b++)

    {

    c=(int)sqrt(a*a+b*b); /*求c值*/

    if(c*c==a*a+b*b && a+b>c && a+c>b && b+c>a && c<=100) /*判断c的平方是否等于a2+b2*/

    {

    printf("%4d %4d %4d ",c);

    count++;

    if(count%4==0) /*每输出4组解就换行*/

    printf("\n");

    }

    }

    printf("\n");

    return 0;

    }

    运行结果:

    100以内的勾股数有:

    a b c a b c a b c a b c

    3 4 5 5 12 13 6 8 10 7 24 25

    8 15 17 9 12 15 9 40 41 10 24 26

    11 60 61 12 16 20 12 35 37 13 84 85

    14 48 50 15 20 25 15 36 39 16 30 34

    16 63 65 18 24 30 18 80 82 20 21 29

    20 48 52 21 28 35 21 72 75 24 32 40

    24 45 51 24 70 74 25 60 65 27 36 45

    28 45 53 28 96 100 30 40 50 30 72 78

    32 60 68 33 44 55 33 56 65 35 84 91

    36 48 60 36 77 85 39 52 65 39 80 89

    40 42 58 40 75 85 42 56 70 45 60 75

    48 55 73 48 64 80 51 68 85 54 72 90

    57 76 95 60 63 87 60 80 100 65 72 97

    总结

    以上是编程之家为你收集整理的C语言求勾股数(详解版)全部内容,希望文章能够帮你解决C语言求勾股数(详解版)所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    小编个人微信号 jb51ccc

    喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

    展开全文
  • 勾股数

    2019-08-20 20:55:51
    勾股数 题目 特殊毕达哥拉斯三元组 毕达哥拉斯三元组是三个自然数a < b < c组成的集合,并满足 ...由素勾股数的性质可知,只需要求出素勾股数那么它的倍数也是勾股数,而要求素勾股数要借助...
  • Java 勾股数

    2019-01-22 16:58:57
     勾股数是一组三个自然数,a &lt; b &lt; c,以这三个数为三角形的三条边能够形成一个直角三角形  输出所有a + b + c &lt;= 1000的勾股数  a小的先输出;a相同的,b小的先输出。 输出格式  每行为一...
  • 判断勾股数

    2020-08-21 20:10:44
    勾股数定义:又名毕氏三元数 。勾股数就是可以构成一个直角三角形三边的一组正整数。勾股定理:直角三角形两条直角边a、b的平方和等于斜边c的平方(a²+b²=c²) c++实现 bool is_Pythagorean_triple(int a,int b,...
  • 勾股数定理

    2019-01-14 18:15:15
    一、勾股数 形如 一类的数称为勾股数(a,b,c为正整数)。 x^2+y^2=z^2 二、一些性质 1.直角三角形的两条直角边和斜边满足勾股数定理。 2. .a+b&gt;c,a-b&lt;c 3.当a为奇数时, a=2n+1,则 b=2n^2+2n=(a-...
  • 这篇文章主要介绍了Python实现获取前100组勾股数的方法,涉及Python数值计算与判断相关操作技巧,需要的朋友可以参考下本文实例讲述了Python实现获取前100组勾股数的方法。分享给大家供大家参考,具体如下:本来想采用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,127
精华内容 2,450
关键字:

勾股数表