嵌套循环中的srand()结果相同

时间:2014-04-29 08:32:49

标签: c loops for-loop nested srand

所以我的任务是为批量项目生成随机生成的权重和利润(0/1背包问题)。我在批处理[]中表示批处理。我的问题是:

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

  2. 第二个for循环将值分配给p [j]和w [j],但是当它跟随j时,在每次迭代时分配值从j开始,我怎样才能从0开始?

  3. 输出:

    | 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]);
        }
    

1 个答案:

答案 0 :(得分: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
            }