//程序的思路是:数组的位置和要赋予的值都是二者都必须是随机产生的。否则做不到洗牌的效果
//首先随机产生数组行列的下标,然后判断该元素是否需要赋值
//确定需要赋值之后再产生1-36的随机数,判断产生的随机数是否已经存在
//不存在则将该位置赋值为这个数,存在则重新产生随机数,直到赋值成功。
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
int e[6][6]={0}; //初值为0
int find(int i,int j)
{//对产生的随机位置判断是否需要赋值 (返回0需要,返回1不需要)
if(e[i][j]!=0)
return 1;
return 0;
}
int sure(int k)
{//对产生的随机数字判断是否已经存在于数组当中(返回1存在,返回0不存在)
for(int i=0;i<6;i++)
{
for(int j=0;j<6;j++)
{
if(k==e[i][j])
return 1;
}
}
return 0;
}
int main()
{
int i;int j;int k;int n=0;
srand((int)time(NULL));
while(n<36)
{
i=rand()%6;//产生随机位置
j=rand()%6;
if(find(i,j)==0)//确定随机位置是否需要赋值,是0表示需要赋值
{
while(1)//直到赋值成功结束
{
k=rand()%36+1;//产生随机数量
if(sure(k)==0)//确定随机数量是否已经存在
{
e[i][j]=k;
n++;
break;
}
}
}
// printf("%d ",n);
}
//printf("\n");
for(int i=0;i<6;i++)//输出
{
for(int j=0;j<6;j++)
{
printf("%2d ",e[i][j]);
}
printf("\n");
}
//getchar();
}