优惠券收集人问题

问题描述:

它是一个经典的统计问题,有很多实际应用。这个问题从一套对象中拿出一个对象,然后找到要将所有需要拿的对象都至少拿出来一次,需要拿多少次。为了叙述方便,以扑克牌为例。一副打乱的52张扑克牌,找出在看到每种花色都有一张出现前,需要选多少次。编写程序,模拟要得到四张不同花色的牌所需要的选取次数,然后显示选中的四张牌(有可能一张牌被选了两次)。

解题思路:

要解决这个问题首先要解决以下几个子问题:

  • 怎样模拟一副牌出来
  • 怎样将牌打乱(也就是俗称的洗牌)
  • 怎么模拟无限摸牌
  • 无限摸牌退出的条件是什么?

这里我们这里我们使用了一个boolean型的数组存储每个花色是否出现过,出现了就设为true。

源码如下:

public class demo1{
    public static void main(String[] args){
        boolean[] huase = new boolean[4];   //存放每种花色的抽取情况 
        boolean flag = false;
        int count = 0;
        //因为并不知道要抽多少次,所以要放在一个无限循环中 
        while(flag == false){       
            if(huase[0]&&huase[1]&&huase[2]&&huase[3])  //若四种花色都出现过 
                flag = true;
            else{
                switch(choosePai(huase)){
                    case "Spades":
                        huase[0] = true;
                        break;
                    case "Hearts":
                        huase[1] = true;
                        break;
                    case "Diammonds":
                        huase[2] = true;
                        break;
                    case "Clubs":
                        huase[3] = true;
                        break;
                }
            }
            count++;
        }
        System.out.println("Number of picks:"+count); 
    }
    
    public static String choosePai(boolean[] huase){
        int[] deck = new int[52];   //用来存放52张牌 
        String[] Huases = {"Spades","Hearts","Diamonds","Clubs"};
        String[] ranks = {"Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"};
        
        //首先初始化牌组
        for(int i = 0;i < deck.length;i++){
            deck[i] = i;
        } 
        
        //进行洗牌
        for(int i = 0;i < deck.length;i++){
            int Index = (int)(Math.random()*deck.length);
            int temp = deck[i];
            deck[i] = deck[Index];
            deck[Index] = temp;
        }
        
        //从52张牌中任选一张进行抽牌
        int i = (int)(Math.random()*deck.length);
        String Huase = Huases[deck[i] / 13];
        String rank = ranks[deck[i]%13];
        switch(Huase){
        case "Spades":  
            if(!huase[0])  
                {System.out.println(rank+" of "+Huase);huase[0] = true;}  
            break;  
        case "Hearts":  
            if(!huase[1])  
                {System.out.println(rank+" of "+Huase);huase[1] = true;}  
            break;  
        case "Diamonds":  
            if(!huase[2])  
                {System.out.println(rank+" of "+Huase);huase[2] = true;}  
            break;  
        case "Clubs":  
            if(!huase[3])  
                {System.out.println(rank+" of "+Huase);huase[3] = true;}  
            break;  
        } 
        return Huase;
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VisualSVN是一款流行的Subversion源代码管理工具,广泛用于Windows平台。据悉,VisualSVN在公司注重客户满意度而不是追逐持续定期收入,因此不定期提供优惠活动来吸引新客户和回报老客户。 VisualSVN优惠券可以为用户带来价格折扣,可以在购买时输入优惠码以获得折扣。这种折扣通常是基于商品价格的百分比补贴。例如,用户可以购买半年或一年的VisualSVN许可证,在结账时输入优惠码,享受10-20%的折扣优惠。 VisualSVN优惠券通常会在特定节假日或活动中发布,例如万圣节、感恩节或圣诞节。此外,它们也会作为特定用户类型的福利而发布,例如教育机构、非营利组织和个人开发者。 总之,VisualSVN优惠券可以帮助用户节省一定费用,提高购买Subversion源代码管理软件的体验和满意度。 ### 回答2: VisualSVN是一个功能强大的Subversion服务器管理工具,可以帮助开发团队更好地协作和管理代码版本。该软件采用友好的图形界面,易于安装和配置,支持集成各种开发环境,如Visual Studio、Eclipse等,提供可靠的安全性和高效的性能。 VisualSVN提供各种优惠券,让用户享受优惠购买该软件,比如节假日特惠、团购优惠、授权升级优惠等。用户在购买时只需输入相应的优惠码即可享受折扣,既省钱又能得到优质的产品和服务。 使用VisualSVN可以大大提高开发效率和代码质量,利用其方便的版本控制功能可以更好地管理和跟踪代码版本,避免出现冲突和错误。此外,VisualSVN还提供了实用的工具和插件,如日志分析工具、邮件通知、安全审计等,让开发者更加方便地管理和维护代码库。 总之,VisualSVN 优惠券是帮助开发人员更加经济地获取VisualSVN产品的好机会。无论是创业公司、中小企业还是个人开发者,都可以受益于这些优惠门票。选择VisualSVN,让你的开发更加高效、安全、系统化。 ### 回答3: VisualSVN 是一款优秀的 Subversion 客户端工具,同时也是一款 SVN 服务器的商业软件。VisualSVN 软件公司会定期推出各种促销活动,以此来吸引更多的用户使用他们的产品。其中就包括 VisualSVN 优惠券。 使用 VisualSVN 优惠券的方式非常简单,用户只需在购买时输入该优惠券的代码,就能享受折扣。通常该优惠券的折扣力度会根据不同时间段、不同促销活动而有所不同。比如,可能会有全年持续的特价活动,也可能是某个节日期间的限时促销。 除了 VisualSVN 官方网站外,其他一些第三方网站、平台也会提供 VisualSVN 优惠券。在这些平台上购买 VisualSVN 软件,有时价格更为优惠。 不过,需要注意的是,不论在哪里购买 VisualSVN 软件,都需要保证软件是正版授权的。否则,用户很容易遇到软件无法升级、服务质量差等问题。因此,在购买前,最好先了解清楚需要购买哪个版本、如何使用 VisualSVN 优惠券问题,以免出现不必要的麻烦。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值