内容简介:求100以内的所有勾股数。所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。根据“勾股数”定义,所求三角形三边应满足条件 a
问题描述
求100以内的所有勾股数。
所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。
问题分析
根据“勾股数”定义,所求三角形三边应满足条件 a 2 + b 2 = c 2 。可以在所求范围内利用穷举法找出满足条件的数。
算法分析
采用穷举法求解时,最容易想到的一种方法是利用3个循环语句分别控制变最a、b、c的取值范围,第1层控制变量a,取值范围是1〜100。在a值确定的情况下再确定b值,即第2层控制变量b,为了避免结果有重复现象,b的取值范围是a+1〜100。a、b的值已确定,利用穷举法在b+1〜100范围内一个一个的去比较,看当前c值是否满足条件 a 2 + b 2 = c 2 ,若满足,则输出当前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<stdio.h>
#include<math.h>
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
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-11/155506.htm
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 每秒解析千兆字节的 JSON 解析器开源,秒杀一大波解析器!
- 注册中心 Eureka 源码解析 —— EndPoint 与 解析器
- 新一代Json解析库Moshi源码解析
- mybatis源码配置文件解析之三:解析typeAliases标签
- MySQL内核源码解读-SQL解析之解析器浅析
- Laravel 核心——IoC 服务容器源码解析(服务器解析)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
鸟哥的Linux私房菜
鸟哥 / 机械工业出版社 / 2008-1 / 88.00元
《鸟哥的Linux私房菜:服务器架设篇(第2版)》是对连续三年蝉联畅销书排行榜前10名的《Linux鸟哥私房菜一服务器架设篇》的升级版,新版本根据目前服务器与网络环境做了大幅度修订与改写。 全书共3部分,第1部分为架站前的进修专区,包括在架设服务器前必须具备的网络基础知识、Linux常用网络命令、Linux网络侦错步骤,以及服务器架站流程:第2部分为主机的简易防火措施,包括限制Linux对......一起来看看 《鸟哥的Linux私房菜》 这本书的介绍吧!