C语言中如何实现在1到6中随机产生一个数字并存入数组中,一共存12次,如何保证每个数字只重复一次

如题所述

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 12
int main(int argc, char *argv[])
{
int i;
int x[N] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6};

printf("之前数组: ");
for (i = 0; i < N; i++)
printf("%3d", x[i]);
printf("\n");

srand((unsigned)time(NULL));

for (i = N-1; i >= 0; i--)
{
int rd = rand() % N;
int temp = x[i];
x[i] = x [rd];
x[rd] = temp;
}

printf("之后数组: ");
for (i = 0; i < N; i++)
printf("%3d", x[i]);
printf("\n");

return 0;
}
——————————————————————————————————
其实该问题类似洗牌的程序,所有的数字其实都是已知的,只需要通过随机数去打乱这些数的次序就可以达到效果。先前的regret4hxp2的思路可以达到同样的效果,但是有个缺点是效率不高,而且需要引入同步的计数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-13
1到6.一共就6个数字。 存12次,就是12个数。

所以,最简单的思路就是,产生数字,就检索,在当前数组中出现几次了,如果出现过一次或者0次,就存,如果出现两次了就不存了。
最后,肯定是正好 每个数字存了两次。

C语言中如何实现在1到6中随机产生一个数字并存入数组中,一共存12次,如...
define N 12 int main(int argc, char *argv[]){ int i;int x[N] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6};printf("之前数组: ");for (i = 0; i < N; i++)printf("%3d", x[i]);printf("\\n");srand((unsigned)time(NULL));for (i = N-1; i >= 0...

C语言中如何实现,在1到6之间产生随机数并存入数组中,数组一共有12个数 ...
calc[1]~calc[6]分别储存1~6的使用的次数 每当产生一个随机数放入temp,若calc[temp]>2则重新产生直到calc[temp]<=2才把pNumber=temp 然后calc[temp]++ 具体程序由于我不会NSMutableArray我把它放在num数组中 include <iostream.h> include <stdlib.h> include void main(){ srand((unsigned)t...

C语言中如何生成一个随机数组
实现代码如下:include include<stdlib.h> include<stdio.h>void main(){ srand( (unsigned)time( NULL ) );int a[100];printf("随即初始化数组的100个数(范围是0~100).\\n");for(int i=0;i<100;i++){ a[i]=rand()%101;printf("%4d",a[i]);if(i%10==0 && i!=0)printf("\\...

C语言 用srand每次产生一个随机数,并储存在数组里,且要保证每个随机数不...
void main(){ int i,j;int x[10];int v = 50,n=10;srand((unsigned)time(NULL));x[0] = rand() % v +1;for (i=0;i<n;i++) { Lab: x[i] = rand() % v +1;for (j=0;j<i;j++) { if (x[i] == x[j]) goto Lab;} \/\/ 比较一下,相同数则不要它,...

如何用C语言实现 从指定的几个数中随机抽出一个数。这几个数不是连续...
M是指定的数的个数,nums[]存放需要的数 include <stdio.h> include include <stdlib.h> define M 10 int main(){ int nums[M] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};srand((unsigned)time(0));printf("%d\\n", nums[rand()%M]);} ...

C语言如何把rand()产生的随机数存入数组
rand()函数是产生随机数的一个随机函数。(1)使用该函数首先应在开头包含头文件stdlib.h include<stdlib.h>(C++建议使用#include<cstdlib>,下同)(2)在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。(3)rand()函数没有...

在c语言中,将一个数插入一个数组中的程序怎么写?
有一个已排好序(从大到小)的数组有5个元素,从键盘输入一个数,要求按原排序的规律将它插入到数组中1.#include<stdio.h>void main({int i,x,j; int {1,5,10,15,20}; scanf("%d",&x);for(i=0;i<5;i++) if(x=j;i--)a[i+1]=a[i]; \/*将位置j以后的数据都向后移一位...

c语言中如何实现输入一个整数,并将它存入一个数组
类似这样 int i[5],j;for(j=0;j<5;j++){ scanf("%d", i+j);}

c语言实现从一个数组中随机抽取一个元素
随机产生一个数,然后每次将数组元素的最后一个数与这个数交换,并且数组的长度减1。代码如下:include<stdio.h> include<stdlib.h> define N 100 int main(){ int a[N];int i,t,tag;for(i=0;i<N;i++)a[i] = i;tag = N-1;while(tag){ i = rand()%tag;t = a[i];a[i] ...

c语言如何实现随机数字的产生
1.C语言提供了一些库函数来实现随机数的产生。C语言中有三个通用的随机数发生器,分别为 rand函数,random函数,randomize 函数 2.但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态...

相似回答
大家正在搜