关于#c语言#的问题:在验证信封问题时候发现就算用了srand函数的得到的随机数也是重复的

本人初学c,验证一个概率问题,在执行的时候发现就算用了srand函数的得到的随机数也是重复的,有没有帮看一下是什么问题

img

img

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个程序有一些问题。以下是修复后的代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() {
    int n = 0;
    int a[101];
    float g = 0, i = 1000;

    srand(time(0));
    while(i > 0) {
        for (int k = 0; k < 10; k++) {
            a[k] = rand() % 100 + 1;
            for (int m = 0; m < k; m++) {
                if (a[m] == a[k]) {
                    k--;
                    break;
                }
            }
        }
        for (int b = 0; b < 10; b++)
            printf("%d ", a[b]);
        printf("\n");
        for (int c = 0; c < 10; c++) {
            if (a[c] == c+1) {
                n++;
                break;
            }
        }
        i--;
    }

    g = n / 1000.0;
    printf("发生的次数是%d(n概率是%f)\n", n, g);
    return 0;
}


主要修改如下:

  1. 将 int a[101; 改为 int a[101];
  2. 在 while 循环外面加上 srand(time(0));
  3. 将 if(a[c]==c+1) n++;break; 改为 if(a[c]==c+1) { n++; break; }
  4. 将 printf("发生的次数是%d(n概率是%f1n",n,g); 改为 printf("发生的次数是%d(n概率是%f)\n",n,g);

srand函数要写在循环外