C语言求勾股数代码及解析

栏目: C · 发布时间: 7年前

内容简介:求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

C语言求勾股数代码及解析

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-11/155506.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

iOS软件开发揭密

iOS软件开发揭密

虞斌 / 电子工业出版社 / 2011-5-1 / 79.00元

本书以严密的体系性提供了iPhone和iPad软件开发从入门到专家的系统性知识,并提供来源于真实项目的可重用商业代码。书中的每个实例都是项目经验的提炼,深入浅出地讲解iPhone和iPad软件开发的核心技术要点,基本涵盖了iOS软件开发在真实商业项目中所需要的所有主题,并将实例介绍的技术深度和超值的实用性结合在一起,成为本书的特色。 随书附赠的光盘中包含了书中大量案例的完整工程源代码,可以让......一起来看看 《iOS软件开发揭密》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换