0

我的目标是生成一个程序,它可以从用户(srand)那里获取一个随机数,然后将它提供给一个随机数生成器(rand),然后在 1 到 10 之间选择一个随机数的 1000 次迭代。然后我想输出每个数字有多少被看到(即 7 出现 83 次,等等)。

在从用户那里获取初始数字后,我可以随机打印 1 到 10 之间的 1000 个数字,但无法弄清楚如何获取此输出并将其提供给一个数组,然后该数组可用于分解信息印刷。有人可以帮忙吗?

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

int rand1(void);
void srand1(unsigned int seed);

int main()

{
    int rand_array[1000];
    int count;
    int start=1;
    int end=10;
    int number_var;
    int ones=0;
    int twos=0;
    int threes=0;
    int fours=0;
    int fives=0;
    int sixes=0;
    int sevens=0;
    int eights=0;
    int nines=0;
    int tens=0;
    int frequency[11];
    int i=0;


    unsigned seed;



    printf("Please enter your choice for seed.\n");
    printf("(between 1-10)");

    while (scanf("%u", &seed) == 1)

    {
        srand1(seed);



        for(i=0; i < 1000; i++)
        {
            rand_array[i]=rand1()%(end-start+1)+start;
            frequency[rand_array[i]]++;
        }

        for(i = 1; i < 11; i++)
        {
            printf("There are %d %d's\n", frequency[i], i);
        }


    }


    return 0;

}





int rand1(void)

{
    static unsigned long int next = 1;

    next = next * 1103515245 + 12345;
    return (unsigned int) (next/65536) % 32768;
}




void srand1(unsigned int seed)

{
    static unsigned long int next = 1;
    next = seed;
}
4

1 回答 1

4

您可以有一个大小为 10(或 11)的数组,类型为整数,其中每个插槽代表生成该数字的次数。例如,槽 3 表示生成 3 的次数。所以试试这个:

//declare array to hold frequencies
int frequency[11];

//reset all slots to 0
for(int i = 1; i < 11; i++)
{
  frequency[i] = 0;
}

//for each random number, increment the associated slot in the frequency array
for(int i = 0; i < 1000; i++)
{
  frequency[rand_array[i]]++;
}

//print the results
for(int i = 1; i < 11; i++)
{
  printf("There are %d %d's\n", frequency[i], i);
}

注意:我并没有真正阅读您现有的大部分代码,所以我不确定您是否还有其他问题。

编辑:这是一个一般想法的例子。

假设你有一些随机数:

5, 2, 4, 9, 9, 2, 1, 10

您的frequency数组从 0 开始:

[0,0,0,0,0,0,0,0,0,0]

所以现在我们遍历你的随机数,并增加相关的插槽。

比如我们读取5,现在我们的频率数组是:

[0,0,0,0,1,0,0,0,0,0]

然后2:

[0,1,0,0,1,0,0,0,0,0]

然后是4:

[0,1,0,1,1,0,0,0,0,0]

然后是 9:

[0,1,0,1,1,0,0,0,1,0]

再次

[0,1,0,1,1,0,0,0,2,0] 

在末尾:

[1,2,0,1,1,0,0,0,2,1]

现在我们知道每个数字有多少!假设我们想知道有多少个 9,我们只看第 9 个插槽,我们看到有 2 个。

这更有意义吗?这比为每个数字设置 10 个单独的变量,然后说“如果数字是 1,增加我的 1s 变量,如果是 2,增加 2s 变量”要好得多。另外,如果您有 1 到 100 而不是 1-10 之间的随机数,那么调整您的代码会容易得多。

于 2012-08-12T23:00:04.400 回答