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

int main()
{
    int n, i;

    srand(time(NULL));

    for(i = 1; i <= 19; i++)
        printf("%d \n", rand() * 21 / RAND_MAX);

    return 0;
}

コードは機能します。並べ替え。コンソール 20 に 1 ~ 20 の「乱数」が表示されます。1 19 6 8 18 6 8 などのように、一部の数字は多かれ少なかれ繰り返されます。

私が必要とするのは、最大の数を表示することです。私は初心者なので、シンプルに保ちます。ありがとう。

4

3 に答える 3

4

そのことについて何:

int biggest = 0;

for(i = 1;i < 20; i++){
   int num = rand() * 21 / RAND_MAX;

   if (num > biggest){
      biggest = num;
   }

   printf("%d \n", num);
}

printf("Biggest: %d \n", biggest);
于 2013-11-02T14:22:53.040 に答える
0

これを試して

int biggest = 0, num;


for(i=0; i < 20; i++)
{   
    num = 1 + rand()%20; 
    if (biggest < num)
        biggest = num;  
}       
printf("%d \n", biggest);
于 2013-11-02T14:27:10.320 に答える
0

信じられないかもしれませんが、このような注文統計を 1 つの乱数で行うことができます。kがランダム値の数で、それぞれが範囲内にある場合、次のよう1..max_valueになります。

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

int main(void)
{
    int seed;
    /*
     * Grab a seed value from /dev/random to avoid time dependency
     * artifacts in the first generated rand() value when running
     * this multiple times in quick succession.
     */
    FILE *fp = fopen("/dev/random", "r");
    fread((char*)(&seed),sizeof(seed),1,fp);
    fclose(fp);

    srand(seed);
    int k = 20;
    int max_value = 20;

    /* 
     * The k'th root of a single uniform has the same distribution as
     * the max of k uniforms. Then use inversion to convert to desired
     * output range.
     */
    int num = 1 + max_value * exp( log( ((double)rand()) / RAND_MAX ) / k );
    printf("%d is the max of %d samples in the range 1..%d\n", num, k, max_value);
    return 0;
}

1..20 の範囲の最大 20 個の乱数と同じ分布を持ち、ループする必要はありません! 関数の大きkさとコストに応じてrand()、これは本当に効果があります。

于 2013-11-02T18:45:39.507 に答える