2013-08-30 108 views
-3

我嘗試了很多,但沒有解決方案。我必須將一個長度爲16的1d數組轉換爲一個4x4的2d數組,其中元素對角線位於java將1d陣列轉換爲對角放置元素的2d

例如。 維數組作爲輸入:需要{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

輸出:

enter image description here

+0

請發表您的代碼/想法。 – Maroun

+0

您的輸出是一維數組。 –

+0

4x4二維數組?我很抱歉 –

回答

2

這是簡單的:在一個一個維陣列

1-讀取值

2-確保數組的長度是16

3-創建的二維陣列

4-橫向在所述一個維陣列For循環

5-使用嵌套for循環,從一維數組中的值存儲到二維數組

+0

thx爲答案,但我需要輸出類似於圖像中提供的輸出。 http://i.stack.imgur.com/CzP9Q.png – Sonal

+0

嗨,我只做了這件事,但它會導致數組隨機放置數字。我希望對角放置元素,就像圖片中給出的一樣http://i.stack.imgur.com/CzP9Q.png – Sonal

+1

你是如何實施納爾吉斯的答案的?第四點和第五點沒有提出任何具體的算法,只是一般的方法。如果你得到隨機輸出,你很可能寫了一些不在這個答案中的東西。 :) – Mario

0

像這樣(僞代碼;只是爲了給你一些隨意的想法;我沒有測試它;我認爲它的工作原理,但有可能會包含一些錯誤):

input = array[n * m]; 
output = array[m][n]; 

var i = 0; 
var x = 0; 
var y = 0; 

while (i < array.length) { 
    if (x < n && y < m) 
     output[y][x] = input[i++]; 
    if (y-- == 0) { // we're already at the "top" 
     y = x + 1; // move to the next row 
     x = 0;  // reset the column 
    } 
} 

只是要注意,這是不最有效的方式做到這一點,但這應該工作。

重要的是,萬一這是一些功課: 雖然#2是爲了回答這些問題,你應該總是提供一些最少的代碼向人展示你試過什麼。這樣我們可以告訴你你犯了什麼錯誤。不要讓別人爲你寫所有的代碼,因爲你不會從中學習。因此,我強烈建議您嘗試上面的代碼,但前提是您能夠理解實際發生的事情。一旦你這樣做了,你可以開始自己實施,只看你是否被卡住了。

+0

看看這個程序。問題徹底解決了.http://javawk.blogspot.in/2013/10/important-array-programto-traverse.html – Sonal

1

啊...好問題,爲n x n問題:

int i = 0; 
for (int diagonal_length = 1; diagonal_length <= n; ++diagonal_length) { 
    for (int j = 0; j < diagonal_length; j++) { 
     out[diagonal_length - j - 1][j] = in[i]; 
     ++i; 
    } 
} 

我已經離開了右下角的三角形;應該很容易做到這一點。

+1

輸出正確:-)謝謝 – Sonal

+0

這是在一次採訪中問道,我無法解決這個問題。好的解決方案 – hemant