2013-05-08 6 views
0

내 목표는 1 차원 배열의 임의 순열을 사용하여 채울 2 차원 배열을 만드는 것입니다. tab의 첫 번째 행과 열은 채워서는 안됩니다.1D 배열의 순열을 사용하여 1D 배열 채우기

#include <stdio.h> 
#include <time.h> 

#define S 5 

void make_board(char tab[S][S]){ 
    int i; 
    int j; 
    char signs[16] = {'Z', 'Z', 'Y','Y','X','X','W','W','U', 'U', 'V', 'V', 'S', 'S', 'T', 'T'}; 

    srand(time(NULL)); 

    for(i = 0; i < 16; i++){ 
     int r = (rand() % 16); 
     int rx = (rand() % 4) + 1; 
     int ry = (rand() % 4) + 1; 
     tab[rx][ry] = signs[r]; 
    } 
} 

답변

0

은 어쩌면 당신은 tab[rx][ry] = r;에서 signs[r] 대신 r를 사용한다 : 이것은 내가 작동하지 않는, 지금까지 시도 무엇인가?

+0

,하지만 여전히 난, 일부 필드는 항상 비어 있습니다, 일부는 당신이 16까지 루프 – Leo

+0

난 내 배열에 포함 didnt는 문자가 필요 줘 나던하지만, 필드 크기가 5x5이므로 0에서 25까지 순환하고 rx = rand() % 5에서 순환해야합니다. ry = rand() % 5; –

+0

아니요, 첫 번째 열과 첫 번째 행이 비어 있어야합니다. 설명에 있습니다.) – Leo

0

순열의 경우 의 각 chartab의 고유 한 위치에 배치되는 경우 조금 더 작업해야합니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

#define S 5 
#define C 16 

int main() 
{ 
    char signs[C] = {'Z', 'Z', 'Y', 'Y', 'X', 'X', 'W', 'W', 'U', 'U', 'V', 'V', 'S', 'S', 'T', 'T'}; 
    char tab[S][S]; 

    srand(time(NULL)); 

    // generate the random permutation 
    size_t perm[C]; 
    for (int i = 0; i < C; i++) 
     perm[i] = i; 

    for (int i = 0; i < C; i++) 
    { 
     int j = rand() % C; 
     char tmp = signs[j]; 
     signs[j] = signs[i]; 
     signs[i] = tmp; 
    } 

    // copy the chars to tab 
    int k = 0; 
    for (int i = 1; i < S; i++) 
    { 
     for (int j = 1; j < S; j++) 
     { 
      tab[i][j] = signs[perm[k++]]; 
      printf("%c", tab[i][j]); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 
물론, 내 실수의
+0

작동하지만, 그것은 나에게 준다. 'Z'three times;/ – Leo

+0

글쎄 그것은 무작위 적이기 때문에 매번 출력이 달라질 것입니다. 각 줄에 글자가 반복되는 것을 원하지 않는다고 말하는 것입니까? – Max

+0

음 'signs'의 모든 요소를 ​​한 번만 사용하고 싶습니다. 그것의 2 배 Z, 2 배 Y 등등 ... 그리고 나는 srand가 그것을 돌보고 있다고 생각했습니다. – Leo

관련 문제