大学生新闻网,大学生新闻发布平台
大学生新闻网
大学生新闻大学生活校园文学大学生村官
社会实践活动社会实践经历社会实践报告社会实践总结社会实践心得
全国排名校友会版软科排名分类排名本科排名一本排名二本排名专科排名学校地址
求职简历职场法则面试技巧职场故事求职招聘大学生就业
英语学习计算机学习电气工程机械工程经济管理建筑设计财务会计
申请书证明书检讨书自荐信演讲稿心得体会调查报告读后感求职信推荐信其它范文

C语言求勾股数

问题描述
求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<stdio.h>
#include<math.h>
int main()
{
    int a, b, 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     ", a, b, c);
                count++;
                if(count%4==0)  /*每输出4组解就换行*/
                    printf("\n");
            }
        }
    
    printf("\n");
    return 0;
}</math.h></stdio.h>
运行结果:

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
    作者:大学生新闻网    来源:大学生新闻网
    发布时间:2025-03-11    阅读:
    扫一扫 分享悦读
  • C语言求最大公约数
  • 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。
  • 03-12 关注:0
  • C语言求勾股数
  • 所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。
  • 03-11 关注:3
  • C语言求回文数
  • 将数组中元素重新组合成一新数。拆分时变量a的最高位仍然存储在数组中下标最大的位置
  • 03-11 关注:3
  • C语言水仙花数
  • 输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13
  • 03-11 关注:3
  • C语言求自守数
  • 自守数是指一个数的平方的尾数等于该数自身的自然数。
  • 03-11 关注:2
  • C语言求亲密数
  • C语言求亲密数
  • 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A
  • 03-11 关注:2
  • C语言求完数(完全数)
  • C语言求完数(完全数)
  • 如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完数”。
  • 03-11 关注:3