题目
请设计一个随机洗牌系统,将52张除大小王外的扑克随机发给4个人 ,并对每个人手中的牌进行排序后输出。
排序规则:先按花色排,依次为黑桃、红桃、梅花、方片,同花色的按点数从小到大排。其中,点数A视作点数1。
输出格式:每人占1行,相邻两张牌之间用1个空格分开。
分析
1.要用到函数rand(),生成随机数。
2,可以用函数sort(),对生成的数进行排序。
代码
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int a[14],A[14];
int b[14],B[14];
int c[14],C[14];
int d[14],D[14];
int arr[53]={0};//如果一张牌被发,则其变为1
int main()
{
int i,n,j=1;
arr[0]=1;
for(i=1;i<=13;)
{
n=rand()%52;//随机取数
if(arr[n]==0)
{
a[i]=n;
arr[n]=1;
i++;
}
}
for(i=1;i<=13;)
{
n=rand()%52;
if(arr[n]==0)
{
b[i]=n;
arr[n]=1;
i++;
}
}
for(i=1;i<=13;)
{
n=rand()%52;
if(arr[n]==0)
{
c[i]=n;
arr[n]=1;
i++;
}
}
for(i=1;i<=52;i++)//对于d[i],我们只要找出剩余的13张牌
{
if(arr[i]==0)
{
d[j]=i;
arr[i]=1;
j++;
}
}
sort(a,a+14);//利用C++库函数排序
sort(b,b+14);
sort(c,c+14);
for(i=1;i<=13;i++)
{
A[i]=a[i]%4;a[i]=a[i]/4;if(A[i])a[i]++;//我用0,1,2,3给花色排序,1是红桃、2是梅花、3是方片 ,0是黑桃
B[i]=b[i]%4;b[i]=b[i]/4;if(B[i])b[i]++;
C[i]=c[i]%4;c[i]=c[i]/4;if(C[i])c[i]++;
D[i]=d[i]%4;d[i]=d[i]/4;if(D[i])d[i]++;
}
for(i=1;i<=13;i++)
printf("%2d-%d ",a[i],A[i]);
cout<<endl;
for(i=1;i<=13;i++)
printf("%2d-%d ",b[i],B[i]);
cout<<endl;
for(i=1;i<=13;i++)
printf("%2d-%d ",c[i],C[i]);
cout<<endl;
for(i=1;i<=13;i++)
printf("%2d-%d ",d[i],D[i]);
cout<<endl;
return 0;
}
结果
吐槽
写这个文章我用了一个多小时,太累了,老是出状况<_>。
分析
感觉我的代码在处理这些数据上非常复杂,应该还能再改改,让它简单一点,所以,非常期待徐哥晚上的讲题。嘿嘿。