打卡5.8——勾股数

Posted genyuan0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打卡5.8——勾股数相关的知识,希望对你有一定的参考价值。

1.问题描述

求100以内所有的勾股数

所谓勾股数,是指能够构成三角形三条边的三个正整数。

2.问题分析

勾股数,要符合a^2+b^2=c^2,而且任意两条边的和大于第三条边

这就要用到sqrt函数,就相当于不用平方了

c = (int)sqrt(a * a + b * b);
                if (c* c == a * a + b * b && a + b > c && a + c > b && b + c > a && c <= 100)//这里不要忘记是一百以内的

 

3.算法分析

穷举法,两个循环语句分别控制a,b,这样a和b的值能确定,它们的平方和等于c的平方,可以将a^2+b^2的平方根赋值给c,再去判断c的平方是不是等于a^2+b^2,是不是符合直角三角形

4.程序

#include<iostream>
#include<math.h>
using namespace std;
int main()

    int a, b, c, d = 0;
    for(a=0;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^2是不是等于a^2+b^2,然后两边之和大于第三边
                
                    cout << a << "  " << b << "  " << c << "  " << endl;//输出
                        cout << endl;//换个行
                
        
    cout << endl;

50以内的勾股数

要自然数

50以内的勾股数

3、4、5

15、8、17

5、12、13

7、24、25

6、8、10

9、12、15

15、20、25

12、16、20

20、21、29

10、24、26

18、24、30

24、32、40

当a为大于1的奇数2n+1时

b=2n²+2n, c=2n²+2n+1。

实际上就是把a的平方数拆成两个连续自然数,例如:

n=1时(a,b,c)=(3,4,5)

n=2时(a,b,c)=(5,12,13)

n=3时(a,b,c)=(7,24,25)

由于两个连续自然数必然互质,所以用这个套路得到的勾股数组全部都是互质的。

参考技术A 3 4 5,
(6,8,10),(9,12,15),(12,16,20),(15,20,25),(18,24,30)(21,28,35)(24,32,40)(27,36,45)(30,40,50)
5 12 13,(10,24,26),(15,36,39)
8 15 17, (16,30,34)
7 24 25,(14,48,50)
20 21 29,
12 35 37,
9 40 41,
参考技术B 3 4 5,
(6,8,10),(9,12,15),(12,16,20),(15,20,25),(18,24,30)(21,28,35)(24,32,40)(27,36,45)(30,40,50)
5 12 13,(10,24,26),(15,36,39)
8 15 17, (16,30,34)
7 24 25,(14,48,50)
20 21 29,
12 35 37,
9 40 41,
参考技术C 3.4.5
15.8.17
5.12.13
7.24.25
6.8.10
9.12.15
15.20.25
12.16.20
20.21.29
10.24.26
18.24.30
24.32.40
参考技术D 3,4,56,8,1012,16,2024,32,4048,64,80

以上是关于打卡5.8——勾股数的主要内容,如果未能解决你的问题,请参考以下文章

50以内的勾股数

求50以内的所有勾股数

勾股数

勾股数

华为OD机试真题 Python 实现勾股数元组

2022华为机试真题 C++ 实现勾股数元组