设为首页 加入收藏

TOP

C语言求勾股数代码及解析(一)
2018-11-26 18:10:47 】 浏览:209
Tags:语言 股数 代码 解析

求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<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   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python 提取Linux的硬件信息 下一篇图像处理和OpenCV初步

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目