洗扑克牌(扑克牌排序或乱数排序)
题目:对52张扑克牌打乱排序(不包括大小王)
思路:一般的思路是随机产生152的随机数,但随机数会重复,重复的次数越多,程序的运行速度越慢。所以我们可以将152依次存入数组,在遍历数组的同时随机产生1~52的随机数,以随机数作为数组下标,和当前的数交换
数子除以13,由商判断花色,由余判断扑克牌数子
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define maxnum 52
using namespace std;
int main()
{
int poker[maxnum],j,tmp;
for(int i=0; i<maxnum; i++)
{
poker[i] = i+1;
}
for(int i=0; i<maxnum; i++)
{
j = rand()%52;
tmp = poker[i];
poker[i] = poker[j];
poker[j] = tmp;
}
for(int i=0; i<maxnum; i++) //判断花色
{
switch((poker[i]-1)/13) //减去1在除以13,以便将52/13=4计算在内
{
case 0: cout<<"黑桃";break;
case 1: cout<<"红心";break;
case 2: cout<<"方块";break;
case 3: cout<<"梅花";break;
}
switch(poker[i]%13)
{
case 0: cout<<"K";break;
case 12: cout<<"Q";break;
case 11: cout<<"J";break;
default: cout<<poker[i]%13;break;
}
cout<<" ";
if((i+1)%13 == 0)
cout<<endl;
}
return 0;
}
博客持续更新中,欢迎留言交流
杨岚(⊙﹏⊙) 发布了11 篇原创文章 · 获赞 0 · 访问量 99 私信 关注