close

題目連結:   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;
}

arrow
arrow
    創作者介紹
    創作者 尾玉 的頭像
    尾玉

    louisfghbvc的部落格

    尾玉 發表在 痞客邦 留言(0) 人氣()