문제

for(i = 0; i < n; i++){
        srand(time(NULL));
        printf("%d ", time(NULL));
        for(j = 0; j < (n-1); j++){
            a[i][j] = rand();
        }
    }

나는 랜덤 숫자를 생성하려고하지만 동일합니다 ... 나는 시도합니다. srand(i * time(NULL)). 상관없이 .. 어떻게해야하나요?

배열 선언 :

int** a;
int i;
printf("Enter array size: ");
scanf("%d", &n);

a = (int**)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
    a[i] = (int*)calloc(n-1, sizeof(int));
도움이 되었습니까?

해결책

부르다 srand() 루프 외부. 당신은 모든 반복을 재조정하고 있습니다.

srand() 임의의 숫자 생성기를 시드하여 입력에 따라 다른 랜덤 숫자 시퀀스를 얻습니다. 루프는 매우 빠르게 실행되므로 호출 time(NULL) 항상 같은 값을 반환합니다. 반복 할 때마다 동일한 랜덤 시퀀스로 재설정하고 있습니다. 일반적으로 전화 만 전화하십시오 srand() 당신의 프로그램에 한 번.

다른 팁

전화하지 마세요 srand() 루프를 통해 매번 - 미리 한 번만하십시오.

FAQ 13.15 에게 13.20 관심이있을 것입니다. 그리고 나는 그러한 질문에 대한 새로운 태그를 만들고 싶은 유혹을받습니다.

srand 임의의 숫자 생성기를 "시드"하는 함수입니다. 모르는 경우 컴퓨터의 임의 숫자는 실제로 무작위가 아닙니다. 사실상 컴퓨터에는 무작위로 보이는 숫자 목록이 있으며 사용합니다. srand 해당 목록에서 어디에서 시작 해야하는지 말하면 각 호출마다 rand() 목록에서 다음 항목을 반환합니다.

당신이 쓰는 이유 srand(time(NULL)) 프로그램을 실행할 때마다 동일하지 않은 시점에서 임의의 숫자를 시작하는 것입니다 (프로그램이 동시에 시작되지 않는 한).

따라서 여기서하고있는 일은 동일한 지점에서 임의의 숫자 목록을 다시 시작하도록 프로그램에 반복적으로 알려주는 것입니다 (루프를 통과 할 때마다 시간이 동일하기 때문에). 전화를 옮깁니다 srand 루프 밖에서 올바른 결과를 얻을 수 있습니다.

alt text

srand(time(NULL)); 

for(i = 0; i < n; i++){         
        printf("%d ", time(NULL)); 
        for(j = 0; j < (n-1); j++){ 
            a[i,j] = rand(); 
        } 
    } 

루프 밖에서 Srand를 한 번 전화하십시오.

전화해야합니다 srand() 루프에 들어가기 전에. srand() 주어진 시드로 Radnom 번호 생성기를 초기화 하고이 시드에 대해 고유 한 랜덤 숫자 시퀀스를 생성합니다.

루프는 모든 전화로 매우 빠르게 실행됩니다 time(NULL) 동시에 (초로 측정 됨) 수익 - 따라서 모든 루프 반복에서 동일한 시드로 임의 번호 생성기를 초기화합니다.

srand(time(NULL));
for(i = 0; i < n; i++){
    for(j = 0; j < (n-1); j++){
        a[i,j] = rand();
    }
}

문제 없어. 숫자는 동일합니다 ...

int** a;
int i;
printf("Enter array size: ");
scanf("%d", &n);
if( n < 1 ){
    printf("Size should be > 0\n\n");
    return NULL;
}
a = (int**)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
    a[i] = (int*)calloc(n-1, sizeof(int));

여기 내 배열이 있습니다 ...

Sergey, 당신은 a[i,j] 버전은 단순히 완벽하게 유효한 표현이기 때문입니다. 쉼표 연산자는 왼쪽에서 오른쪽으로 하위 표현을 평가하고 마지막 표현식의 값을 반환합니다. 따라서 글쓰기 a[i,j] 동일합니다 a[j]. 인쇄에서받은 것은 매트릭스의 J-th 벡터에 대한 포인터의 값이었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top