【问题标题】:srand() in nested loop same results嵌套循环中的 srand() 结果相同
【发布时间】:2014-04-29 08:32:49
【问题描述】:

所以我的任务是随机生成成批物品的重量和利润(针对 0/1 背包问题)。我在 batch[] 中表示数组中的批次。我的问题是:

  1. rand() 在第二个 for 循环中没有生成唯一的随机值。是因为嵌套的for循环吗?

  2. 第二个 for 循环为 p[j] 和 w[j] 赋值,但由于它遵循 j,在每次迭代中赋值从 j 开始,我如何每次从 0 开始?

输出:

| 231 |25
| 231 |25
| 231 |25
| 231 |25

| 0 | 0
|19 | 4
|19 | 4
|19 | 4
|19 | 4
|19 | 4



main(){
srand(time(NULL));
int i, j, t;
int batch[] = { 4, 5 };
int sizeOfBatch = sizeof(batch) / sizeof(batch[0]);

for (i = 0; i < sizeOfBatch ; i++){


    int *p = (int*)calloc(batch[i], sizeof(int));   
    int *w = (int*)calloc(batch[i], sizeof(int));   

            for (j = 0; j < batch[i]; j++){                 

        p[j] = rand() % 500;
        printf("\n| %d  ", p[i]);
        w[j] = rand() % 100;
        printf("| %d  ", w[i]);
    }

【问题讨论】:

    标签: c loops for-loop nested srand


    【解决方案1】:

    您正在分配给p[j](和w[j])并打印p[i](和w[i]);您的问题与srand()rand() 无关。

            p[j] = rand() % 500;      // assign to p[j]
            printf("\n| %d  ", p[i]); // print p[i]
            w[j] = rand() % 100;
            printf("| %d  ", w[i]);
    

    在第二个循环中,每次循环开始时,j0 开始

                for (j = 0; j < batch[i]; j++) {
                    // first time through the loop, j is 0
                }
    

    【讨论】:

    • 我猜看代码几个小时会让事情变得更糟。现在一切都解决了。我是多么愚蠢。反正我猜是对的。不敢相信自己。
    • 良好变量命名的重要性:您可以使用batchnumtestnum 代替ij :)
    • 明白。谢谢。
    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多