所以我的任务是为批量项目生成随机生成的权重和利润(0/1背包问题)。我在批处理[]中表示批处理。我的问题是:
rand()在第二个for循环中没有生成唯一的随机值。是因为嵌套的for循环吗?
第二个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]);
}
答案 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]);
在第二个循环中,每次循环开始时,j
从0
开始
for (j = 0; j < batch[i]; j++) {
// first time through the loop, j is 0
}