在随机填充的数组中找到一组最常见的数字
Find a set of the most common numbers in a randomly filled array
下午好,有一个关于C语言编程抽奖的问题想请教
要求是:
如果盒子里每个号码标有 46 个球,并且有 10K 次机会挑选一个球,则计算每个号码的机会。
然后,在每个项目上打印数字和数字的机会。打印的表格必须是这样的:
Number 45: 251 times
找出六个最常找到的数字并将它们打印出来。打印的表格必须是这样的:
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 循环中,注释为:
#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
下午好,有一个关于C语言编程抽奖的问题想请教
要求是:
如果盒子里每个号码标有 46 个球,并且有 10K 次机会挑选一个球,则计算每个号码的机会。
然后,在每个项目上打印数字和数字的机会。打印的表格必须是这样的:
Number 45: 251 times
找出六个最常找到的数字并将它们打印出来。打印的表格必须是这样的:
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 循环中,注释为:
#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