列挙法01(以下、床の循環を使用することができます):四広場と

タイトル:四平方定理、また、ラグランジュの定理として知られている:それぞれの正の整数が4平方までの正の整数として表すことができます。0含まれている場合、それはちょうど4ビット数と正方形を表すことができます。
例えば:
5 = 0 ^ 2 + O 2 + 1 2 + 2 ^ 2
7 = 1 2 + 1 2 + 1 ^ 2 + 2 ^ 2
、次いで任意の正の整数をNとして表すことができます。 N = ^ 2 + B ^ 2 + C ^ 2 + D ^ 2
あなたが辞書溶液の最小セット、B、Cを取得する必要があり、d。
入力フォーマット
プログラムは、N(1 <= Nの整数の正の入力します<= 5,000,000)
出力フォーマット
を出力する4つの非負の整数、B、C、D、離れ中間空。
サンプル入力1:
5
サンプル出力1:
0012
サンプル入力2:
12である
サンプル出力2:
0222

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n, a, b, c, d;
    cin >> n;
    for(a=0; a*a <= n; a++){
        for(b=a; a*a + b*b <= n; b++){
            for(c=b; a*a + b*b + c*c <= n; c++){
            	d = sqrt(n - a*a - b*b - c*c);//注意
                if(a*a + b*b + c*c + d*d == n){
                    cout << a << " " << b << " " << c << " " << d << endl;
                    return 0;
				}
            }
		}
	}
    return 0;
}

この問題は、アルゴリズム上の任意の難易度ではない、純粋な列挙することができますが、a、b、c、dはサイクルで表され、そして、タイムアウト!だからここにヒントがありますこれです:それは時間がかかりますが、最後の数は、直接計算SQRTを来るSQRTが、時間サイクルは、必要な長さよりも短いです。もちろん、SQRT GETは必ずしも整数ではない、それは問題ではありません!後でかどうか同等の判断をするために使用されている場合ので。

公開された15元の記事 ウォン称賛10 ビュー213

おすすめ

転載: blog.csdn.net/qq_39053800/article/details/104241110