数组中的随机数和C中的delete
我正在写一个非常简单的程序,但我似乎无法让它正常工作。我想从一个数字为1-69的数组开始,然后从该数组中随机选择5个数字,而不重复。我不想只是洗牌数组,然后取前5个数字。我希望它更像是一个从帽子里拿出来的暗数字,概率是它应该的样子。 例如: 数组1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] Array2[] //我希望它从Array1中随机选择一个元素,将其从Array1中移除,然后将其放置在Array2中。然后重复这个过程,直到我从数组1中随机抽取了5个数字,不再重复 非常感谢您的帮助!谢谢大家! 另外,我正在用C写这个项目。你不能简单地“删除”C数组中的一个单元格;如果你真的想这样做,最好的办法是:数组中的随机数和C中的delete,c,arrays,random,C,Arrays,Random,我正在写一个非常简单的程序,但我似乎无法让它正常工作。我想从一个数字为1-69的数组开始,然后从该数组中随机选择5个数字,而不重复。我不想只是洗牌数组,然后取前5个数字。我希望它更像是一个从帽子里拿出来的暗数字,概率是它应该的样子。 例如: 数组1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] Array2[] //我希望它从Array1中随机选择一个元素,将其从Array1中移除,然后将其放置在Array2中。然后重复这个过程,直到我从
- 选择秩为n的元素(从数组A中)并对其执行任何操作
- 用
memcpy
- 记住数组A的新大小(因为分配的内存在整个过程中保持不变)
A[]
<代码>长度=69代码>index=rand()%Length代码>
A[index]
与数组元素A[Length-1]
交换长度--
A[]
的最后五个元素是所需的集合-无重复- 创建一个包含所有彩票的
数组hat
- 从数组中选择一个随机票证,存储它并从帽子中移除票证
- 重复上述步骤,直到您拥有所需数量的车票
#包括
#包括
#包括
int main()
{
int hat[70];//数字池
大小\u t n=70;//池的大小
尺寸i;
//获取伪随机数生成器
srand(时间(空));
//用所有数字填充池
对于(i=0;i
在您的例子中,与池相比,绘制的数字的数量很小,因此您实际上可以从另一个角度来看问题:不限制绘制的项目,您可以查看您已经绘制的项目并绘制一张罚单,直到获得一张您尚未看到的罚单。但上述方法是通用的。请在下次之前展示您的研究成果。请先阅读第页。最近有几个关于这个主题的问题。稍微搜索一下C页面上的random,更一般地说,是Fisher-Yates shuffle。数学上正确的方法是洗牌并选择前五个循环——你可以在五个循环后缩短洗牌时间,这样你就不必洗牌所有69个项目。事实上,你认为这在某种程度上不是“恰当地”模拟从帽子上画出而不替换,这只是你人类思维的偏见。学习数学,把它做好。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
int hat[70]; // pool of numbers
size_t n = 70; // size of pool
size_t i;
// get pseudo-random-number generator underway
srand(time(NULL));
// fill pool with all numbers
for (i = 0; i < n; i++) hat[i] = i;
// pick five numbers and print them
for (i = 0; i < 5; i++) {
size_t pick = rand() % n;
printf("%d\n", hat[pick]);
hat[pick] = hat[--n];
}
return 0;
}