題目連結: https://onlinejudge.org/external/115/11565.pdf
題目大意: 給你a, b, c 並給公式 求找出相異x, y, z。
思路: 因為C <= 10000,而 x^2 + y^2 + z^2 = C,所以x y z都不大,直接枚舉O(N^3),從-100~100
可以再優化成O(N^2),只需枚舉x y,z可由A - x - y 而來。這邊代碼沒優化。
代碼:
#include <bits/stdc++.h>
using namespace std;
int t, a, b, c;
bool check(){
for(int x = -100; x <= 100; ++x){
for(int y = -100; y <= 100; ++y){
for(int z = -100; z <= 100; ++z){
if(x == y || x == z || y == z) continue;
if(x + y + z != a) continue;
if(x*y*z != b) continue;
if(x*x + y*y + z*z != c) continue;
printf("%d %d %d\n", x, y, z);
return 1;
}
}
}
return 0;
}
int main()
{
//freopen("out.txt", "w", stdout);
cin >> t;
while(t--){
cin >> a >> b >> c;
if(!check()) puts("No solution.");
}
return 0;
}
留言列表