在随机填充的数组中找到一组最常见的数字

Find a set of the most common numbers in a randomly filled array

下午好,有一个关于C语言编程抽奖的问题想请教

要求是:

  1. 如果盒子里每个号码标有 46 个球,并且有 10K 次机会挑选一个球,则计算每个号码的机会。

  2. 然后,在每个项目上打印数字和数字的机会。打印的表格必须是这样的:

    Number 45: 251 times
    
  3. 找出六个最常找到的数字并将它们打印出来。打印的表格必须是这样的:

    The most found were 45, 27, 8, 10, 12, 15
    

所以我的代码是:

#include <stdio.h>
#include <stdlib.h>
#define SIZE 10000
#define ballamount 6
int main(void)
{
    int fq[SIZE] = {0};
    int i, max = 0, maximum1 = 0, temp = 0;
    for (int i = 0; i < SIZE i++)
    {
        ++fq[rand() % 45 + 1];
    }
    for (i = 0; i < 45; i++)
    {
        printf("number %d: %d times\n", i + 1, fq[i]);
    }

    for (i = 0; i < ballamount i++)
    {
        for (int j = 0; j < 45; j++)
        {
            fq[j] = fq[0];
            if (fq[j] > temp)
            {
                temp = fq[j];
                max = j;
            }
        }
        fq[i] = max;
        fq[max] = 0;
        printf("Maximum number is %d.\n", max);
    }
    return 0;
}

我找不到解决这个问题的路径。我该如何解决?提前致谢。

你快到了,fq 包含给定索引随机 selected 的次数,你已经有了,你只需要 select 六个最大的数组中的值,对您的代码稍作调整就会得到正确的结果。

您的代码已修复,包括 ; 个拼写错误,在 for 循环中,注释为:

Live demo

#include <stdio.h>
#include <stdlib.h>
#include <time.h> // for the seed

#define SIZE 10000
#define ballamount 6
int main(void)
{
    srand(time(NULL)); // add a seed for your random number generator
    int fq[46] = {0}; // the array only needs 46 elements
    int max = 0;
    int temp = 0;

    for (int i = 0; i < SIZE; i++) // was missing ;
    {
        ++fq[rand() % 46]; // if it's from 1 to 46, use index 0 to 45 
    }
    for (int i = 0; i < 46; i++) // index 0 to 45
    {
        printf("number %d: %d times\n", i + 1, fq[i]);
    }
    printf("The most found balls were: ");
    for (int i = 0; i < ballamount; i++) // was missing ;
    {
        for (int j = 0; j < 46; j++)
        {
            if (fq[j] > temp)
            {
                temp = fq[j];
                max = j;
            }
        }
        printf("%d ", max + 1); // adding 1, index starts at 0
        fq[max] = 0;
        temp = 0; // reset temp after the loop
    }
}

可能的输出:

number 1: 194 times
number 2: 187 times
...
...
The most found balls were: 28 30 43 5 29 12