srand() во вложенном цикле те же результаты

Итак, моя задача состоит в том, чтобы произвести случайную генерацию веса и прибыли для партий предметов (для задачи о рюкзаке 0/1). Я представил партии в массивах в пакете []. Моя проблема в том, что:

  1. rand() не генерирует уникальные случайные значения во втором цикле 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]);
    }

person economist_wannabe    schedule 29.04.2014    source источник


Ответы (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]);

Во втором цикле каждый раз, когда цикл начинается, j начинается с 0

            for (j = 0; j < batch[i]; j++) {
                // first time through the loop, j is 0
            }
person pmg    schedule 29.04.2014
comment
Я предполагаю, что глядя на код в течение нескольких часов, все становится еще хуже. Теперь все исправлено. Какой же я глупый. В любом случае, я думаю, это было правильно. Не могу поверить себе. - person economist_wannabe; 29.04.2014
comment
Важность правильного именования переменных: вместо i и j можно использовать batchnum и testnum :) - person pmg; 29.04.2014
comment
Понял. Спасибо. - person economist_wannabe; 29.04.2014