问题描述

求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

#include

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语言求20以内的勾股数,C语言求勾股数代码及解析相关推荐

  1. Bailian2729 求12以内n的阶乘 Bailian2730 求20以内n的阶乘【递推】

    求20以内n的阶乘 求12以内n的阶乘 总时间限制: 1000ms 内存限制: 65536kB 描述 求20以内n的阶乘. 输入 只有一行输入,整数n(n<=20). 输出 只有一行输出,数值n ...

  2. 20以内的素数编码C语言,用C语言 输出100以内的素数,

    用C语言 输出100以内的素数, 用C语言 输出100以内的素数, 输出100以内的素数,谁能帮一下,我做了好久没做出来,也想了好久, 能带注释那更好了,我是新中新手,还有很多很多的不懂, 搜索更多相 ...

  3. 求100以内的素数(c语言)

    求100以内的素数(c语言) 素数的概念 素数:该数除1及其本身不再有其它的因数 2为最小的素数 代码: #include<stdio.h> void main(){for(int num ...

  4. C语言 | 求1000以内的所有完数及求2000以内最大的完数(C源代码)

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

  5. 求3000以内的亲密数C语言

    题目要求:求3000以内的亲密数 这道题我第一做的时候我发现我直接就输出所有的亲密数,而说实话,按照题目的意思,A和B是不能相等的.所以我第一次做错了.这是我修改完的代码.当然主要思想还是没有变化. ...

  6. c语言 用筛选法求100以内的素数,使用筛选法求100以内的素数

    使用筛选法求100以内的素数 筛选法介绍 先把N个自然数按次序排列起来. 1不是质数,也不是合数,划去. 第二个数2是质数留下来,而把2后面所有能被2整除的数都划去.2后面第一个没 划去的数是3,把3 ...

  7. python求100以内的素数和_python如何求100以内的素数

    方法一,用for循环来实现 num=[]; i=2 for i in range(2,100): j=2 for j in range(2,i): if(i%j==0): break else: nu ...

  8. 中国大学MOOC课程《Python语言程序设计》第6章 文本词频人物统计 threekingdoms三国演义代码及解析

    以下内容为嵩天老师在课堂上讲解的,分析三国演义中top20人物,也就是出现次数最高的20个人物.为方便童鞋们拷贝,我把代码及解析放到下面,且我多费了点人工,整出top30.通过这个例子可以很好地理解解 ...

  9. c语言求20以内的质数,c语言求出给定范围内的所有质数

    程序功能: 输入一个整数,要求打印出这个整数以内的所有质数. 程序示例: #include #include #include bool IsPrime(int x) { bool bResult = ...

  10. 求 20 以内的阶乘

    题目描述 求 n 的阶乘. 输入 一个数n 输出 一个数,乘积 只有一行输入,整数n(0<=n<=20). 样例 样例输入 10 样例输出 28800 思路 这道题用递推来做. 首先找到调 ...

最新文章

  1. vss6 forgot admin password
  2. ContentType的类型
  3. php绘制频谱图,一步一步教你实现iOS音频频谱动画(二)
  4. VC++ 使用CreateProcess创建新进程
  5. 同步和异步的区别_LED显示屏的同步控制卡和异步控制卡是什么?它们的区别在哪里?...
  6. 炸裂!手摸手教你如何吃透一个 Java 项目,yyds
  7. 【树莓派 + 深度学习 + Python】从零开始做一个你画AI猜的小游戏
  8. ERROR 1356 (HY000): View 'information_schema. SCHEMATA'
  9. 计算机网络实验报告双机互联,双机互联实验报告.docx
  10. Fabric中的私有数据
  11. 云服务器ECS选购集锦之九云服务器选购常见FAQ
  12. transition transform translate 之间的区别
  13. Dz经典加密解密方法。
  14. 2021湖南涟源高考成绩查询,2021娄底市地区高考成绩排名查询,娄底市高考各高中成绩喜报榜单...
  15. Java静态数组和动态数组的定义方式
  16. 软件定义汽车:架构分析
  17. Android Studio 控件
  18. #.数学函数3D图的绘制
  19. 数字孪生城市可视化大屏设计,智慧楼宇开源项目
  20. DBCA时,报DBT-08001、DBT-08002

热门文章

  1. Windows环境下搭建Redis集群
  2. 基于Ruby 安装 sass 安装出现的错误以及解决
  3. iOS移动开发1x 、2x 、3x图片介绍
  4. 无人参与应答文件包含的产品密钥无效,删除无效的密钥或在无人参与应答文件中提供有效的产品密钥继续进行windows安装
  5. 下列属于计算机应用,计算机的应用领域可大致分为6个方面,下列选项中属于计算机应用领域的是...
  6. DFD图练习(图书管理系统)
  7. Android中Home键的监听和拦截
  8. MySQL之desc查看表结构的详细信息
  9. 北工大计算机学院大赛,做北工大的竞赛咖!这些信息你一定不能错过!
  10. 1068 万绿丛中一点红(JAVA)