#利用動態陣列生成魔方矩陣
難點
魔方效果:如果矩陣大小為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...