随机洗牌系统c++

题目

请设计一个随机洗牌系统,将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;
 
}

结果

在这里插入图片描述

吐槽

写这个文章我用了一个多小时,太累了,老是出状况<_>。

分析

感觉我的代码在处理这些数据上非常复杂,应该还能再改改,让它简单一点,所以,非常期待徐哥晚上的讲题。嘿嘿。

发布了8 篇原创文章 · 获赞 1 · 访问量 251

猜你喜欢

转载自blog.csdn.net/xililixilu/article/details/104152935