c - 在动态数组C中生成不重复的随机数

标签 c arrays dynamic random dynamic-arrays

我想随机化一个动态数组,每列随机数不重复,每列都是有限的,

检查我的main.c文件

int main()
{
        int i, j;
        int **p;

        srand(time(0));

        p = malloc(9 * sizeof *p);
        for (i=0; i<9; i++) {
                p[i] = malloc (9 * sizeof *p[i]);
        }
        if (errno) {
                perror("startup");
                exit(1);
        }

        for (j=0; j<3; j++) {
                for (i=0; i<9; i++) {
                        p[j][i] = random(j,i);
                }
        }

        for (j=0; j<3; j++) {
                for (i=0; i<9; i++) {
                        printf(" %d ", p[j][i]);
                }
                printf ("\n");
        }
} 

这是我的随机函数

int random(int *j, int *i)
{
int s = 0;
int b;
int MIN =0;
int MAX=0;
b= i;

switch (b)
{

    case 0:
            MAX = 9;
            MIN = 1;
            s = (rand() % (MAX - MIN + 1)) + MIN;

    break;

case 1:
        MAX = 19;
        MIN = 10;
        s = (rand() % (MAX - MIN + 1)) + MIN;
    break;

case 2:
        MAX = 29;
        MIN = 20;
        s = (rand() % (MAX - MIN + 1)) + MIN;
    break;

case 3:
        MAX = 39;
        MIN = 30;
        s = (rand() % (MAX - MIN + 1)) + MIN;
    break;

case 4:
        MAX = 49;
        MIN = 40;
        s = (rand() % (MAX - MIN + 1)) + MIN;
    break;

case 5:
        MAX =59;
        MIN = 50;
        s = (rand() % (MAX - MIN + 1)) + MIN;
    break;

case 6:
        MAX = 69;
        MIN = 60;
        s = (rand() % (MAX - MIN + 1)) + MIN;
    break;

case 7:
        MAX = 79;
        MIN = 70;
        s = (rand() % (MAX - MIN + 1)) + MIN;
    break;

case 8:
        MAX = 90;
        MIN = 80;
        s = (rand() % (MAX - MIN + 1)) + MIN;
    break;

}
return s;
}

所以现在我想有任何其他方法来做,但我必须使用动态分配 请给我任何可以帮助我的建议。

最佳答案

我会建议一些改变:

  • 用一次分配分配整个矩阵,这样更容易。这意味着您必须手动进行索引(即 matrix[y * width + x]),但这通常不会太难。
  • 您似乎对每列中出现的数字有非常严格的要求。我建议预先将所有数字按顺序放入矩阵中,然后随机洗牌。这通常比消除骗子更容易。

关于c - 在动态数组C中生成不重复的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20570241/

相关文章:

android - FFmpeg mux 视频使用 libavformat avcodec 但无法播放输出

c - BullsEye代码覆盖率

c++ - 二维数组指针不适用于两个维度

html - 为什么 jQuery.live 函数不能用于静态元素?

java - 动态生成数组

c - 如何将变量放入共享内存中?

c - 创建新指针后 getcwd() 返回 NULL

c# - 用 0 到 9 的数字填充字符串并开始新的直到长度为 50

arrays - 如何使用 mongo shell 获取 MongoDB 集合中的所有字段名称,包括嵌套字段名称?

javascript - 如何使用 javascript 添加 img 元素?