//完成了,請樓主測試吧~~~ 這個就是模擬矩陣旋轉(zhuǎn)的問題
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設、網(wǎng)站設計和服務器托管雅安的網(wǎng)絡公司,有著豐富的建站經(jīng)驗和案例。
public class TTT {
public static void main(String[] args){
//RC就是行列數(shù),試試5 6 7 10等數(shù)值,都能正確輸出,呵呵~~
int rc = 4;
int[][] dat = new int[rc][rc];
int count = 0;
//初始化數(shù)據(jù)
for(int i=0; irc; i++){
for(int j=0; jrc; j++){
dat[i][j]=-1;
}
}
while(notFinished(dat,rc)){
for(int i=0; irc; i++){
int jj = -1;//存放未被填充數(shù)據(jù)的行
for(int j=0; jrc; j++){
if(dat[j][i]==-1){
jj = j;break;
}
}
//找到了未填充的行在這里處理
if(jj-1){
while(irc dat[jj][i]==-1){
dat[jj][i++]=++count;
}
dat = rotate(dat,rc);
}
}
}
//這里是修正起始位置的
if(rc%2==1){
for(int i=0; i3; i++)
dat = rotate(dat,rc);
}
else{
dat = rotate(dat,rc);
}
//打印結(jié)果
for(int i=0; irc; i++){
for(int j=0; jrc; j++){
System.out.print(dat[i][j]+"\t");
}
System.out.println("\n");
}
}
//對臨時結(jié)果做逆時針90度旋轉(zhuǎn)
private static int[][] rotate(int[][] dat,int rc){
int[][] tmp = new int[rc][rc];
for(int i=0; irc; i++){
for(int j=0; jrc; j++){
int t = dat[i][j];
tmp[rc-j-1][i]=t;
}
}
return tmp;
}
private static boolean notFinished(int[][] dat,int rc) {
for(int i=0; irc; i++){
for(int j=0; jrc; j++)
if(dat[i][j]==-1)
return true;
}
return false;
}
}
你先點java動畫,顯示一個X,然后再點java動畫下載(上面),下載后,就可以打開它。要不然就是內(nèi)存不夠或沒有打開它,你試一下退出再進來,應該就可以了。
/***魔術(shù)矩陣,也被稱為魔方矩陣。目前魔術(shù)矩陣主要有三種結(jié)構(gòu):N為奇數(shù)、N為4的倍數(shù)、N為其它偶數(shù)(4n+2)。br/*其中目前很多數(shù)學家都還在研究“N為4的倍數(shù)”、“N為其它偶數(shù)(4n+2)”,可見它們對于初學者而言太難。br/*因此此處演示的代碼,僅僅考慮N為奇數(shù)的情況。br/*此代碼作為課件提供給學生參考,在學完數(shù)組、循環(huán)、判斷后練習。br/*@authorluo_wenqiang在126點com*@version1.0.0*/classMagicArray{publicstaticvoidmain(String[]args){/*1.把1放在第一行的最中間2.每個數(shù)字向右上角填充3.如果往右已經(jīng)是最大數(shù)了,就從最左邊重新繼續(xù)4.如果往上已經(jīng)是最大數(shù)了,就從最下邊重新繼續(xù)5.如果遇到行數(shù)的整數(shù)倍,則下一個數(shù)直接放到該數(shù)的下面*//*1.聲明一個n*n二維數(shù)組2.聲明一個int類型的變量記錄每個元素遞增的值,每次自加即可3.需要一個嵌套循環(huán)來填充二維數(shù)組3.1.把橫向的索引認為x,x=n/23.2.把縱向的所應認為y,y=03.3.在循環(huán)中,先把x、y坐標上的值填充,然后計算下一個坐標*/intn=3;int[][]array=newint[n][n];intcounter=1;//自加的計數(shù)器intx=n/2;inty=0;//二維數(shù)組,需要用兩層的嵌套循環(huán)來完成比較簡單for(inti=0;in*n;i++){//根據(jù)坐標填充值array[y][x]=counter;//計算下一個坐標的位置if(counter%n==0){//如果counter是n的整數(shù)倍,下一個坐標是在當前數(shù)字的下面y++;}else{x++;y--;if(y0){//如果y超出范圍,把y設置成最大y=n-1;}if(x==n){//如果x超出范圍,把x設置成最小x=0;}}//使用完以后計數(shù)器需要自加counter++;}for(int[]row:array){for(inti:row){System.out.print(i);System.out.print(\t);}System.out.println();}}}