洗扑克牌(扑克牌排序或乱数排序)

洗扑克牌(扑克牌排序或乱数排序)

题目:对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 · 访问量 97

猜你喜欢

转载自blog.csdn.net/qq_44651133/article/details/104093127