VC++暗记扑克牌问题代码+流程图
需求分析:
本程序主要解决的是: 编程序,让计算机来猜测用户“暗记”的某张扑克牌:计算机从一副扑克牌(54张)中任意抽出27张,摆放在不同的三行上(每行9张),用户“暗记”某张纸牌,而后告诉计算机所“暗记”的那张纸牌处于哪一行中;之后计算机再两次将纸牌重新摆放,并让用户再回答两次相同的提问(那张纸牌在重新摆放后又处在哪一行上);此时计算机会将用户所“暗记”的那张纸牌给挑出来。
1.2概要设计:
本程设计思路: 1)要从一副54张的扑克牌中任意抽出27张,可通过“rand()%54”所产生的随机值来确定。但注意,一旦随机抽走哪张,下次牌中就没有这张了。
2)程序总按照一种策略将三行纸牌重新“摆放”,而后进一步让用户进行指定。上述所谓的策略指的是,总将纸牌“一分为三”:第一次要将每一行的9张分散到不同的3行上(每行仅“剩”3张),而第二次则要将上次“确定”出的某3张进一步分散到不同的3行上(每行只“剩”1张。此时靠用户再指定一次行号则可唯一确定所“暗记”的那张纸牌)。
程序流程图:
1.3 详细设计与编码:
设计起来比较简单:
1. 产生三行9列的随机数,不能有重复。
2. 当输入数据时将三行数字看似随机的打乱
3. 在打乱过程中以三个为单位不重复有规律打乱
4. 再次输入数字时,重复23
5. 最后得到结果
编码的几个主要点在于:
1.产生三行九列的无重复随机数
void ran(int a[],int al,int n) //产生不同随机数函数
{
int i,j; //循环控制变量
time_t t; //时间变量
srand((unsigned)time(&t)); //种下随即发生器必须的种子
a[0]=rand()%n;
for(i=1;i<al;i++)
{
a[i]=rand()%n;
for(j=0;j<i;)
{
if(a[i]!=a[j]) { j++;}
else{ a[i]=rand()%n;j=0;}
2.看似随机打乱的方法:
(1)for(i=1;i<=27;i++)
{
if(i==1){j=0;}
if(i==4){j=9;}
原文请找腾讯752018766辣,文-论'文.网http://www.751com.cn/ if(i==19){j=6;}
if(i==22){j=15;}
if(i==25){j=24;}
if(i==1||i==10||i==19){cout<<"Line"<<i/9+1<<": ";}
printf("%2d ",a[j]);
j++;
if((i)%9==0) cout<<endl;
(2)for(i=0,j=0;j<27;j++)
{
if(i>=27){
if(j>8){i=1;}
if(j>17){i=2;}
}
if(j==0||j==9||j==18){cout<<"Line"<<j/9+1<<": ";}
printf("%2d ",a[i]);
i=i+3;
if((j+1)%9==0) cout<<endl;
程序执行的结果:1805