标题:一个求勾股数的问题
只看楼主
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
结帖率:92.86%
已结贴  问题点数:10 回复次数:17 
一个求勾股数的问题
输入一个正整数n,输出它后面的4个(包括n)的勾股数,假如n*n=a*a+b*b,那么n就是一个勾股数,例如输入150,输出150,153,155,156;
我的程序如下
#include<stdio.h>
int main()
{
    int count=0,a,b,c,d;
    scanf("%d",&c);
    for(c;c>0;c++)
    {
        for(a=0;a<c;a++)
        {
            for(b=0;b<a;b++)
            {
                if(c*c==a*a+b*b)
                {
                    count++;
                    printf("NO%d=%d\n",count,c);
                    if(count==4)
                    {
                        return 0;
                    }
                }
            }
        }
     }
 }
我这个程序正常输入是可以算出来的,但是输入50就是输出50,50,51,52 输入100输出100,100,101,102 输入150输出150,150,153,155.类似这种50倍数字就是有一个重复的出来,其他都是正常的,是不是因为这些勾股数有两种平方方法算出来,应该怎么改程序
搜索更多相关主题的帖子: 输入 输出 int count for 
2018-05-13 08:57
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
没错,是正确的。
因为:30的平方+40的平方=50的平方
      45的平方+24的平方=51的平方
      48的平方+20的平方=52的平方
      80的平方+60的平方=100的平方
      96的平方+28的平方=100的平方
      99的平方+20的平方=101的平方
      90的平方+48的平方=102的平方
      120的平方+90的平方=150的平方
      144的平方+42的平方=150的平方
      135的平方+72的平方=153的平方
      124的平方+93的平方=155的平方
2018-05-13 10:28
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
你要是不相信的话,请看下面:
程序代码:
#include<stdio.h>
int main()
{
    int count=0,a,b,c,d;
    scanf("%d",&c);
    for(c>0;c;c++)
    {
        for(a=0;a<c;a++)
        {
            for(b=0;b<a;b++)
            {
                if((c*c)==(a*a)+(b*b))
                {
                    count++;
                    printf("NO%d=%d\n",count,c);
                    printf("NO%d=%d\n",count,a);
                    printf("NO%d=%d\n",count,b);
                    if(count==4)
                    {
                        return 0;
                    }
                }
            }
        }
     } 

 }
2018-05-13 10:30
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
得分:0 
回复 3楼 自学的数学
我想不出现重复的数字,例如输入150,出现的是150,150,153,155,  但是我想要的是输出150,153,155,156   这个要怎么实现?
2018-05-13 12:23
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:10 
回复 4楼 一鑫
程序代码:
#include<stdio.h>
int main()
{
    int count=0,a,b,c,d;
    scanf("%d",&c);
    for(c>0;c;c++)
    {
        for(a=1;a<c;a++)
        {
            for(b=1;b<a;b++)
            {
                if(c*c==a*a+b*b)
                {
                    count++;
                    printf("NO%d=%d ",count,c);
                    printf("NO%d=%d ",count,a);
                    printf("NO%d=%d\n",count,b);
                    c++    ;
                    if(count==4)
                       return 0;
                      
                }
                
            }
        }
        
     } 

 }


[此贴子已经被作者于2018-5-13 14:26编辑过]

2018-05-13 14:22
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 5楼 自学的数学
虽然可以得出答案,但看上去不全面~
在原来的基础上+1不改变a和b的值并保持递增状态这样可能会造成数据遗失~
除非可以证明c和c+1是连续两个勾股数的时候总有a1<a2
这个证明似乎……我不说话了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-13 17:04
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:540
专家分:1158
注 册:2016-9-17
得分:0 
无视这楼
 }

[此贴子已经被作者于2018-5-13 19:38编辑过]


穷举是最暴力的美学
2018-05-13 19:26
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:540
专家分:1158
注 册:2016-9-17
得分:0 
回复 6楼 九转星河
a1^2+b1^2=c1^2
a2^2+b2^2=c2^2
if c1>c2&&a1<=a2
=>b1>b2
所以只进行c++而不进行a,b值的改变时可行的


穷举是最暴力的美学
2018-05-13 19:38
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 8楼 nosnoy
用了循环结束条件连续跳出两层循环~

还可以写函数用return来达到这种效果~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-13 19:39
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:540
专家分:1158
注 册:2016-9-17
得分:0 
回复 9楼 九转星河
其实不会出现数据丢失的情况
因为他的循环体本来就有b<a<c的约束条件,所以c++是可行的

穷举是最暴力的美学
2018-05-13 19:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486880-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.227832 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved