我的目标是创建一个二维数组,使用一维数组的随机排列来填充。不应填写tab
的第一行和第一列。这是我到目前为止所尝试的,但这不起作用:
#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 :(得分:0)
也许您应该在signs[r]
中使用r
代替tab[rx][ry] = r;
?
答案 1 :(得分:0)
对于排列,char
中的每个signs
都放在tab
中的唯一位置,您需要做更多的工作。
#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;
}