[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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值