四平方和

1593 ワード

四平方和
四平方和の定理は、ラグランジュの定理とも呼ばれます.各正の整数は、最大4つの正の整数の平方和として表すことができます.0を含めると、ちょうど4つの数の平方和として表すことができます.
例えば、5=0^2+0^2+1^2+2^2+2+2^7=1^2+1^2+1^2+2^2(^記号は乗の意味を表す)
与えられた正の整数に対して、複数の二乗和の表現が存在する可能性がある.4つの数をソートする必要があります:0<=a<=b<=c<=dで、すべての可能な表現に対してa,b,c,dを結合主キー昇順に並べて、最後に最初の表現を出力します.
プログラム入力が正の整数N(N<5000,000)になるには、4つの非負の整数を出力し、小さいものから大きいものに並べ替え、中間をスペースで分ける必要がある.
たとえば、入力:5の場合、プログラムは0 0 1 2を出力する必要があります.
例えば、入力:12の場合、プログラム出力:0 2 2 2
また、例えば、入力:773535では、プログラム出力:1 1 267 838
リソース約定:ピークメモリ消費(仮想マシンを含む)<256 M CPU消費<3000 ms
要求通りに出力し、「入力してください」のような余分な内容を蛇足せずに印刷してください.
すべてのコードを同じソースファイルに配置し、デバッグに合格した後、コピーしてソースコードをコミットします.注意:package文は使用しないでください.jdk 1は使用しないでください.7以降の機能.注意:メインクラスの名前は:Mainでなければなりません.そうしないと、無効なコードで処理されます.
答え
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {	
		boolean pt = true;
		int n = new Scanner(System.in).nextInt();
		for(int i = 0; i * i < n;i++){
			for(int j = 0;j * j < n;j++){
				for(int k = 0;k * k < n;k++){
					for(int m = 0;m * m < n;m++){
						if(i*i + j*j + k*k + m*m == n){
							int t = 0;
							int a[] = new int[4];
							a[0]= i;
							a[1] =j;
							a[2] =k;
							a[3] =m;
							for(int q = 0;q<4;q++){
								for(int p = q+1;p<4;p++){
									if(a[q]>a[p]){
										t = a[q];
										a[q] = a[p];
										a[p] = t;
									}
								}
							}
							if(pt){
								System.out.println(i+" "+j+" "+k+" "+m);
								pt = false;
							}
							
						}
					}
				}
			}
		}
	}
}