`
atell
  • 浏览: 158384 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[C趣味编程]自动发牌

阅读更多

题目:一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。

 

解答:虽然比较简单,动手练习还是我的目的~

 

import java.util.Random;

/**
 * 模拟随机发牌的过程。<br>
 * 书中的思想:生成[1,52]的随机数,存到数组int[] faPais中,如果不存在,则存放,如果存在,则重新生成随机数。以上重复52遍。<br>
 * 我的思想:定义存放1到52的数组A,生成[1,i]的随机数num(i从52到1),生成num之后,打印出来,并且从数组A中删除num<br>
 * 区别:<br>
 * 书中的思想的耗时时间是52*X,X是判断随机数是否已经存在的时间,X大约是[1,52]不等,如果已经存在,X将会翻n倍。<br>
 * 我的思想的耗时时间是52*X,X是从数组中删除num的时间,大约是[1,52]不等。(如果使用链表代替顺序数组,增加查找时间,减少是删除时间,总体不变)
 * 
 * @author atell
 *
 */
public class FaPai {

    public static Random random = new Random();
    /**
     * [1,52]对应扑克牌的规则:A<2<3<...<K的顺序,方块<梅花<红心<黑桃的顺序。<br>
     */
    public static void main(String[] args) {
        int[] pais = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,43, 44, 45, 46, 47, 48, 49, 50, 51, 52 };
        for(int i=52;i>0;i--){
            int num =random.nextInt(i);
            System.out.print(convert2Pai(pais[num])+' ');
            if(i%13==1)System.out.println();//13张则换行
            delete(pais,num,i);
        }
    }

    public static void delete(int[] pais, int num,int length) {
        for(int i = num;i<length-1;i++){
            pais[i] = pais[i+1];
        }
        pais[length -1] = 0;
    }

    public static String[] HuaSes = { "黑桃", "方块", "梅花", "红桃" };

    public static String convert2Pai(int num) {
        int huaSe = num % 4;
        int shuZi = num / 4 + 1;
        if (shuZi == 1)
            return HuaSes[huaSe] + "A";
        else if (shuZi == 11)
            return HuaSes[huaSe] + "J";
        else if (shuZi == 12)
            return HuaSes[huaSe] + "Q";
        else if (shuZi == 13)
            return HuaSes[huaSe] + "K";
        else
            return HuaSes[huaSe] + shuZi;
    }

}

 

效果:

方块5 方块10 梅花2 黑桃5 红桃J 方块3 黑桃4 梅花6 红桃2 方块6 黑桃Q 方块A 方块Q
梅花10 梅花4 黑桃J 梅花3 方块K 黑桃2 梅花7 梅花8 红桃7 方块8 黑桃8 梅花9 方块7
黑桃6 红桃4 红桃6 红桃3 方块2 红桃5 红桃8 梅花A 黑桃10 梅花Q 方块4 黑桃7 红桃9
梅花J 方块J 梅花K 黑桃14 红桃Q 黑桃3 红桃K 黑桃K 方块9 梅花5 红桃A 黑桃9 红桃10

分享到:
评论

相关推荐

    C/C++语言经典实用趣味程序设计编程百例精解

    自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 &lt;br&gt;C/C++语言经典实用趣味程序设计编程百例精解(10) &lt;br&gt;91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子...

    C-C++语言趣味程序设计编程百例精解

    自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 &lt;br&gt;C/C++语言经典实用趣味程序设计编程百例精解(10) (详解收藏在)http://www.klfd.net.cn/?p=393 &lt;br&gt;91.人机猜数游戏 92....

    c语言实例解析-数值趣味数学篇

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    若干C,C++语言经典实用趣味程序设计编程精解

    自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 &lt;br&gt;91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯数字转换为罗马数字 96.选美比赛 ...

    200个经典C程序源码小游戏

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 ...

    C语言220例从易到难源代码

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    220个C源代码 初学C语言必备

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    C语言实例解析精粹(第二版) 光盘代码

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制...

    C语言源代码实例.rar

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    220个C语言程序源代码集合.zip

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    关于C的精粹包含至少200个C语言小程序

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    C语言程序源代码(大集合).rar

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    C语言实例解析精粹

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    C语言经典源代码实例 数据结构 操作系统 图形等

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    C语言常用算法

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    C语言精粹(第2版)随书关盘

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    C语言学习实例220例

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制...

    200个经典C程序【源码】

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

    电赛必备220个C语言实例源码分享-电路方案

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制...

    经典的C程序220案列

    100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...

Global site tag (gtag.js) - Google Analytics