マトリックスの1つのテーマについて


記録する.题目要求:1つの行列n行m列、出力は以下の行列例えば、n=4、m=5 0 1 2 3 4 13 14 15 16 5 12 18 17 6 11 10 9 8 7例えば、n=3、m=4 0 1 2 3 9 10 11 8 6 5
私の考えは、下のマークから法則を探して、いくつかの輪に相当して、各輪の終了条件はi値が初期のi値+1で、jが初期のj値であるとき、1輪が終了します.例えば、最初の初期の下付き文字が(0,0)、終了の下付き文字が(1,0)である.次に、新しい1周の下付き文字は最初(1,1)で、終了の下付き文字は(2,1)である.周数はn値の半分である.最後にwhile条件で除かれた1つの値を充填する.nが奇数であれば、最中間の1行の値の充填も行う.
コード実装:
package baiao;

public class Test3 {
	public static void main(String[] args) {
		print(8, 9);
		
	}
	public static void print(int n, int m) {
		int[][] a = new int[n][m]; 
		int ibegin = 0;//for       
		int jbegin = 0;
		int iend = n - 1;
		int jend = m - 1;
		int icircle = 0;//while     
		int jcircle = 0;
		int i = 0;//while      i
		int j = 0;
		int tmp = 0;//      
		//System.out.println("\\\\");
		for(int k = 0; k < n / 2; k++) {
			//System.out.println(k + " ");
			while(!(i == icircle + 1 && j == jcircle)){
				//System.out.println("tmp: " + tmp);
				if(j < jend && i == ibegin) {
					a[i][j] = tmp;
					//System.out.println("1i,j" + i + " " + j + "a" +  a[i][j]);
					tmp++;
					j++;
				}
				else if(j == jend && i < iend) {
					a[i][j] = tmp;
					//System.out.println("2i,j" + i + " " + j + "a" +  a[i][j]);
					tmp++;
					i++;
				}
				else if(j > jbegin && i == iend) {
					a[i][j] = tmp;
					//System.out.println("3i,j" + i + " " + j + "a" +  a[i][j]);
					tmp++;
					j--;
				}
				else if(i > ibegin) {
					a[i][j] = tmp; 
					//System.out.println("4i,j" + i + " " + j + "a" +  a[i][j]);
					tmp++;
					i--;
				}
				
				}//    
			icircle++;
			jcircle++;
			ibegin++;
			jbegin++;
			iend--;
			jend--;
			//System.out.println(icircle + " " + jcircle + " " + ibegin + " " + jbegin + " " + iend + " " + jend + " ");
		}//for  
		a[i][j] = tmp;//i==icircle + 1,j == jcircle    
		tmp++;
		//System.out.println( jbegin + " " + jend);
		// n    ,        
		if(n % 2 != 0) {
			for(j = jbegin; j <= jend; j++) {
				a[i][j] = tmp;
				tmp ++;
			}
		}
		//    
		for(int k1 = 0; k1 < n ; k1++) {
			for(int k2 = 0; k2 < m; k2++) {
				System.out.print(a[k1][k2] + " ");
			}
			System.out.println();
		}
	}
}

しゅつりょく
0 1 2 3 4 5 6 7 8 
29 30 31 32 33 34 35 36 9 
28 51 52 53 54 55 56 37 10 
27 50 65 66 67 68 57 38 11 
26 49 64 71 70 69 58 39 12 
25 48 63 62 61 60 59 40 13 
24 47 46 45 44 43 42 41 14 
23 22 21 20 19 18 17 16 15