利用動態陣列生成魔方矩陣

2021-07-31 20:40:22 字數 1466 閱讀 3888

#利用動態陣列生成魔方矩陣

難點

魔方效果:如果矩陣大小為10*10,則矩陣內的100個數,為從1到100的整數不重複的隨機排序。

效果如下圖所示:

主要的兩個函式。

srand

(time

(null))

;//時間種子

k=rand()

%(n*n)

;//產生隨機數

通過malloc()函式動態分配記憶體,n是待使用者輸入的值。

ge=

(int**

)malloc

(sizeof

(int

)*n*n)

;int i;

for(i=

0;i) ge[i]=(

int*

)malloc

(sizeof

(int

)*n)

;

隨機數產生具有隨機性,所以自然產生的隨機數 是可能重複的。而魔方效果要求的是不重複所以我們可以想到的解決方法是:

在產生隨機數的時候,我們檢測這個隨機數是否已經產生過了,沒有則記錄下來,如果已經產生過了,我們要求重新產生。

好的,方法有了。具體怎麼實現呢?

很明顯,這重複產生隨機數直到 產生出乙個之前沒有出現的隨機數為止,這裡需要乙個迴圈

對於怎麼知道乙個隨機數之前有麼有產生過呢,我們需要乙個標記

對矩陣中的每個值執行系列的操作:

count[k]=1

;while

(count[k]

) k=1+

rand()

%(n*n)

; ge[i]

[j]=k;

printf

("%4d"

,ge[i]

[j])

;

其中count是個int 指標,且在氣count[n]以內,每個指向值都被初始化為0。

看到這裡,你是否能夠自己寫出這個程式了呢?

#include

#include

#include

intmain()

printf

("\n");

}return0;

}

本部落格內容到此為止,歡迎指正!

用c 動態生成n n的魔方矩陣

乙個魔法正方形矩陣是乙個n n的矩陣,其中整數1,2,3 n2出現且僅僅出現一次,而每一行 每一列和對角線上元素的和都相等。例如,下面就是乙個5 5的魔法正方形,所有的行 列以及對角線上的和都為65.17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21...

C 利用動態陣列求矩陣轉置

利用c 動態陣列求矩陣轉置問題中,現存的解答存在很多待解決的問題,比如無法讓使用者自定義陣列的大小,只能計算方陣的轉置等。我用一種更加容易理解的方式將矩陣轉置問題編寫了出來,初來乍到,有什麼錯誤還請大家指正。廢話少說,上 include using namespace std static int ...

動態生成陣列

動態生成一維陣列 quint32 count map nodecount qstring name new qstring count 動態生成name一維陣列,儲存點的名字 動態生成二維陣列 quint32 linkatrix linkatrix quint32 malloc sizeof qui...