这题不难,在暴力里加一点点小小的判断就可以了只是有点小技巧
#include <iostream>
#include <memory.h>
using namespace std;
int visa[500];
int visb[500];
int visc[500];
int main()
{
memset(visa,0,sizeof(visa));
memset(visb,0,sizeof(visb));
memset(visc,0,sizeof(visc));
for(int a=1;a<=500;a++){
for(int b=1;b<=500;b++){
if(a!=b){
for(int c=1;c<=500;c++){
if(a+b+c<=1000&&a*a+b*b==c*c){
if(visc[c]==1){
//判断是否换位后相等
if(visa[b]==1&&visb[a]==1)
continue;
else{ //不相等标记a和b然后输出
visa[a]=1;
visb[b]=1;
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
else{//c不等直接标记然后输出
visa[a]=1;
visb[b]=1;
visc[c]=1;
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
}
}
return 0;
}
ac代码如下