18051 勾股数
Description
若三个正整数a、b、c,其中a<=b<=c,满足a2+b2=c2表示上标,称这三个数为“勾股数”,例如:3、4、5是勾股数。编程输出不大于n的所有勾股数。
输入格式
输入一个数(n<=100)
输出格式
输出所有勾股数,按第1个数字由小到大排列(若第1个数字相同,按第2个数字排)
输入样例
16
输出样例
3 4 5
5 12 13
6 8 10
9 12 15
注意输出要求!因此大循环是从a开始,后面的每层初始 = a
正确代码1:三层循环嵌套
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
int main()
{
int n;
cin >> n;
for(int a = 1;a <= n;a++){
for(int b = a;b <= n;b++){
for(int c = b;c <= n;c++){
if(a * a + b * b == c * c){
cout << a << " " << b << " " << c << endl;
}
}
}
}
return 0;
}
正确代码2:两层循环嵌套,c用公式求得
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
int main()
{
int n,a,b,c;
cin >> n;
for(a = 1;a <= n;a++){
for(b = a;b <= n;b++){
c = (int)sqrt(a * a + b * b);
if(a * a + b * b == c * c && c <= n){
cout << a << " " << b << " " << c << endl;
}
}
}
return 0;
}
错误代码:输出是按照c从小到大,不符题意
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
int main()
{
int n;
cin >> n;
for(int a = 1;a <= n;a++){
for(int b = 1;b <= a;b++){
for(int c = 1;c <= b;c++){
if(a * a == b * b + c * c){
cout << c << " " << b << " " << a << endl;
}
}
}
}
return 0;
}