• 简单有趣的算法——随机发牌


    天天对着电脑编程,呃,有时候挺枯燥的,所以还是找点乐子吧。捡到一本好书,里面是一些各种各样有趣的小算法的书。COPY下,顺便练练手,活动活动大脑。

    代码挺简单的,就是调用随机函数生成扑克牌的随机序列,然后输出。

    虽然这段代码挺简单的,但是还是加点说明吧。我也理一下思路,顺便减少大家理解代码的时间。

    wSuit[4]这个数组里储存的是扑克牌的花色,wFace[13]存的是扑克牌的值。wDeck[4][13]用来存放随机生成的扑克牌序列。

    shuffle这个函数的作用:让card这个值从1循环到52,在每一次循环中,随机生成与前面生成不同的行和列,然后wDeck[列][行]=card的当前值。

    deal这个函数用来输出,还是让card从1循环到52,找到对应的值为card的wDeck[列][行],然后输出行和列,当然不是直接输出行和列的值,而是将其转化为wSuit[4]和wFace[13]的值。

    输出函数看上去可能不是那么好理解,它是先找到特定的card值,然后再去找行和列,这样来输出的。

    1 / poker.cpp : Defines the entry point for the console application.
    2  //
    3
    4 #include "stdafx.h"
    5
    6 #include <stdlib.h>
    7 #include <time.h>
    8
    9 void shuffle(int wDeck[4][13]);
    10 void deal(int wDeck[4][13], char*wFace[13], char*wSuit[4]);
    11
    12 void main()
    13 {
    14 char*wSuit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"};
    15 char*wFace[13] = {"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight",
    16 "Nine", "Ten", "Jack", "Queen", "King"};
    17 int wDeck[4][13] = {0};
    18
    19 srand(time(NULL));
    20
    21 shuffle(wDeck);
    22 deal(wDeck, wFace, wSuit);
    23
    24 system("PAUSE");
    25 }
    26
    27 void shuffle(int wDeck[4][13])
    28 {
    29 int r;
    30 int card, row, column;
    31
    32 for(card =1; card <=52; card ++)
    33 {
    34 r = rand();
    35 row = r%4;
    36 r = rand();
    37 column = r%13;
    38
    39 while(wDeck[row][column] !=0)
    40 {
    41 r = rand();
    42 row = r%4;
    43 r = rand();
    44 column = r%13;
    45 }
    46
    47 wDeck[row][column] = card;
    48 }
    49 }
    50
    51 void deal(int wDeck[4][13], char*wFace[13], char*wSuit[4])
    52 {
    53 char c;
    54 int card, row, column;
    55
    56 for (card =1; card <=52; card ++)
    57 {
    58 for (row =0; row <=3; row ++)
    59 {
    60 for(column =0; column <=12; column ++)
    61 {
    62 if (wDeck[row][column] == card)
    63 {
    64 if (card %3==0)
    65 {
    66 c ='\n';
    67 }
    68 else
    69 {
    70 c ='\t';
    71 }
    72 printf("%5s of %-8s%c", wFace[column], wSuit[row], c);
    73 }
    74 }
    75 }
    76 }
    77 }

    输出结果:(每次输出都会不同)

  • 相关阅读:
    如何查看openssl支持的所有TLS/SSL版本
    讲故事,学(AHK)设计模式—观察者模式
    React Hooks 详解 【近 1W 字】+ 项目实战
    为什么要在函数组件中使用React.memo?
    js防抖函数
    JS 深度优先遍历与广度优先遍历 实现查找
    你不知道的 requestIdleCallback
    RE:ゼロから始める文化課生活
    开学考小记 & 新生活的开始
    JS中:数组和对象的区别,以及遍历数组和遍历对象的区别
  • 原文地址:https://www.cnblogs.com/unsigned/p/1756630.html
Copyright © 2020-2023  润新知