24h購物| | PChome| 登入
2012-04-22 06:47:38| 人氣448| 回應6 | 上一篇 | 下一篇

For 網友 majiyenai

推薦 0 收藏 0 轉貼0 訂閱站台

隨機產生一個 1~9 的九宮格, 每次產生的擺法都不一樣

#include <stdio.h>


int main() {
    srand(time(NULL));
    int used[10] = {};
    int grid[3][3], i, j;
    for(i = 0; i < 3; i++) {
        for(j = 0; j < 3; j++) {
            int x = rand()%9+1;
            while(used[x] != 0)
                x = rand()%9+1;
            used[x] = 1;
            grid[i][j] = x;
        }
    }
    for(i = 0; i < 3; i++) {
        for(j = 0; j < 3; j++) {
            printf("%d ", grid[i][j]);
        }
        puts("");
    }
    getchar();
    return 0;
}

台長: Morris
人氣(448) | 回應(6)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 其他題目 |
此分類下一篇:[ITSA][DP][15th 精] Problem 4. Group without direct leaders
此分類上一篇:[機率][加分題79]

majiyeni
您好:
請問used[]是用來做甚麼的,還有在while迴圈內,used[x]有甚麼意義??
感激不盡
2012-04-22 11:28:55
版主回應
判斷是否已經使用過, 數字 x 是否有使用過
2012-04-22 12:48:07
majiyenai
抱歉,第二個問題是used[x]=1,有甚麼意義
2012-04-22 11:30:08
版主回應
一開始全部數字都沒被使用過,
因此 used[x] = 0 for all x,
當使用過後 used[x] = 1
2012-04-22 12:48:51
majiyenai
我懂了,謝謝您,我們還沒教到有兩個括號的陣列,如果只用一個括號的陣列也寫得出來嗎?在我問你之前我用一個括號的陣列想過了好幾個方法,其中一個比較接近你的想法是用一個for迴圈來跑每個陣列,每次會給陣列一個1到9的變數,然後用此變數跟前面陣列所存的值比較,相同就換,不同就存,但我發現它只會跟前一個位置比較,所以在換的時候有可能回與較前面的數字重複,要怎樣才能同時與多個變數比較呢??
2012-04-22 23:46:46
版主回應
二維的那個陣列, 其實是不必要的, 你可以刪除, 僅輸出 x 即可
2012-04-23 06:05:23
majiyenai
為什麼我把while的條件改為下面這樣時,它的輸出就會有問題??
while(a[x]!=1){
b[c][d]=x;
a[x]=1;
}
x=rand()%9+1;
2012-04-23 00:18:21
版主回應
邏輯上是錯誤的, 當有數字重複時, 再重新產生一個新的數字, 因此 x = rand()%9+1 要在 while 中,
此外不可將 a[x] = 1 放入 while 中, while 是要找出一個"非使用過"的數字, a[x] = 1 代表 x 使用過!
2012-04-23 06:04:39
majiyenai
sorry啦我很愛問問題,那麼麻煩你
2012-04-23 00:19:34
majiyenai
感激不盡,以後有問題我都會想找您討教
2012-04-23 13:42:30
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文