问题标题: 酷町堂:4978   勾股定理

0
0
已解决
熊智晖
熊智晖
高级天翼
高级天翼

4978   勾股定理

经验值:1200 时间限制:1000毫秒

题目描述 Description

所谓勾股数,是指满足形如x*x+y*y=z*z这样的(x,y,z)称为一组勾股数。

找出N(包括N)以内的勾股数。如果找不到,则输出No

输入描述 Input Description

一行:一个整数n,(0<n<5000)

输出描述 Output Description

若干行:每行一组勾股数。按第一个数从小到大输出,第一个相同则按第二数第小到大输出。

样例输入 Sample Input

5

样例输出 Sample Output

3 4 5

#include<iostream>
#include<cmath>
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int main(){
    //freopen("1106.in","r",stdin);
    //freopen("1106.out","w",stdout);
    long long b=0,n,cnt=0,sum=0,m;
    bool f=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            for(int k=j+1;k<=n;k++){
                if(sqrt(i*i+j*j)==k){
                    cout<<i<<" "<<j<<" "<<k<<endl;
                    f=1;
                }
            }
        }
    }
    if(f==0){
        cout<<"No";
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

超时???


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

枚举x和y的时候,直接算出x*x+y*y是不是完全平方数,且小于n

for(int x=1;x<=n;x++){
        for(int y=x+1;y<=n;y++){
            int z=x*x+y*y;
            if(pf(z)&&sqrt(z)<=n){
                cout<<x<<" "<<y<<" "<<sqrt(z)<<endl;
            }
        }
    }

判断x是不是完全平方数

(int(sqrt(x))*int(sqrt(x))==x)  //是完全平方数

 

0
汪一言
汪一言
高级守护
高级守护

//#include<bits/stdc++.h>

#include<iostream>

#include<algorithm>

#include<string>

#include<cstdio>

#include<cmath>

#include<iomanip>

using namespace std;

int main(){

bool f=0;

int n;

cin>>n;

for(int i=1;i<=n;i++){

for(int j=i+1;j<=n;j++){

if(sqrt(i*i+j*j)==int(sqrt(i*i+j*j))){

if(sqrt(i*i+j*j)<=n){

cout<<i<<' '<<j<<' '<<sqrt(i*i+j*j)<<endl;

f=1;

}

}

}

}

if(f==0){

cout<<"No";

}

 

return 0;

}

0
吕若朴
吕若朴
中级光能
中级光能

你可以不用枚举k一旦枚举,三重循环就会超时

但是,二重循环不会超时!

你可以直接根据i,j推算出k!

吕若朴在2021-08-01 23:40:26追加了内容

你直接判断i*i+j*j是不是平方数就可以了!

如果是平方数,k=sqrt(i*i+j*j)

省了一重循环

0
李奕歌
李奕歌
初级天翼
初级天翼

Time Limit Exceeded:50分

#include<bits/stdc++.h>
using namespace std; 
int main(){
    long long n;
    cin>>n;
    for (long long i=1; i<=n; i++) {
        for (long long j=i+1; j<=n; j++) {
            for (long long k=j+1; k<=n; k++) {
                if (i*i + j*j == k*k) {
                    cout << i << ' ' << j << ' ' << k << endl;
                }
            }
        }
    }
    return 0;
}

 

0
陈曦
陈曦
资深天翼
资深天翼

我的思路好像跟你的差不多,你可以对照一下(我的AC了

循环1~n(i)
    循环i~n(j)
        循环i~n(k)
            if(i的平方+j的平方等于k的平方){
                cout<<i<<" "<<j<<" "<<k<<endl;
                cnt++;
            }
        }
    }
}
如果cnt是0,输出No

 

0
我要回答