蓝桥杯 分小组 抽签(填空题)

               分小组

            9名运动员参加比赛,需要分3组进行预赛。
            有哪些分组的方案呢?

            我们标记运动员为 A,B,C,... I
            下面的程序列出了所有的分组方法。

            该程序的正常输出为:
            ABC DEF GHI
            ABC DEG FHI
            ABC DEH FGI
            ABC DEI FGH
            ABC DFG EHI
            ABC DFH EGI
            ABC DFI EGH
            ABC DGH EFI
            ABC DGI EFH
            ABC DHI EFG
            ABC EFG DHI
            ABC EFH DGI
            ABC EFI DGH
            ABC EGH DFI
            ABC EGI DFH
            ABC EHI DFG
            ABC FGH DEI
            ABC FGI DEH
            ABC FHI DEG
            ABC GHI DEF
            ABD CEF GHI
            ABD CEG FHI
            ABD CEH FGI
            ABD CEI FGH
            ABD CFG EHI
            ABD CFH EGI
            ABD CFI EGH
            ABD CGH EFI
            ABD CGI EFH
            ABD CHI EFG
            ABD EFG CHI
            ..... (以下省略,总共560行)。
 public class A  
    {  
        public static String remain(int[] a)  
        {  
            String s = "";  
            for(int i=0; i<a.length; i++){  
                if(a[i] == 0) s += (char)(i+'A');  
            }     
            return s;  
        }  

        public static void f(String s, int[] a)  
        {  
            for(int i=0; i<a.length; i++){  
                if(a[i]==1) continue;  
                a[i] = 1;  
                for(int j=i+1; j<a.length; j++){  
                    if(a[j]==1) continue;  
                    a[j]=1;  
                    for(int k=j+1; k<a.length; k++){  
                        if(a[k]==1) continue;  
                        a[k]=1;  
                        System.out.println(__________________________________);  //填空位置  
                        a[k]=0;  
                    }  
                    a[j]=0;  
                }  
                a[i] = 0;  
            }  
        }  

        public static void main(String[] args)  
        {  
            int[] a = new int[9];         
            a[0] = 1;  

            for(int b=1; b<a.length; b++){  
                a[b] = 1;  
                for(int c=b+1; c<a.length; c++){  
                    a[c] = 1;  
                    String s = "A" + (char)(b+'A') + (char)(c+'A');  
                    f(s,a);  
                    a[c] = 0;  
                }  
                a[b] = 0;  
            }  
        }  
    }  
public class Main  
{  
    public static String remain(int[] a)  
    {  
        String s = "";  
        for(int i=0; i<a.length; i++){  
            if(a[i] == 0) s += (char)(i+'A');  
        }     
        return s;  
    }  

    public static void f(String s, int[] a)  
    {  
        for(int i=0; i<a.length; i++){  
            if(a[i]==1) continue;  
            a[i] = 1;  
            for(int j=i+1; j<a.length; j++){  
                if(a[j]==1) continue;  
                a[j]=1;  
                for(int k=j+1; k<a.length; k++){  
                    if(a[k]==1) continue;  
                    a[k]=1;  
                    System.out.println(s+" "+(char)('A'+i)+(char)('A'+j)+(char)('A'+k)+" "+remain(a));
                    a[k]=0;  
                }  
                a[j]=0;  
            }  
            a[i] = 0;  
        }  
    }  

    public static void main(String[] args)  
    {  
        int[] a = new int[9];         
        a[0] = 1;  

        for(int b=1; b<a.length; b++){  
            a[b] = 1;  
            for(int c=b+1; c<a.length; c++){  
                a[c] = 1;  
                String s = "A" + (char)(b+'A') + (char)(c+'A');  
                f(s,a);  
                a[c] = 0;  
            }  
            a[b] = 0;  
        }  
    }  
} 
  抽签
        X星球要派出一个5人组成的观察团前往W星。
        其中:
        A国最多可以派出4人。
        B国最多可以派出2人。
        C国最多可以派出2人。
        ....

        那么最终派往W星的观察团会有多少种国别的不同组合呢?

        下面的程序解决了这个问题。
        数组a[] 中既是每个国家可以派出的最多的名额。
        程序执行结果为:
        DEFFF
        CEFFF
        CDFFF
        CDEFF
        CCFFF
        CCEFF
        CCDFF
        CCDEF
        BEFFF
        BDFFF
        BDEFF
        BCFFF
        BCEFF
        BCDFF
        BCDEF
        ....
        (以下省略,总共101行)
public class A  
    {  
        public static void f(int[] a, int k, int n, String s)  
        {  
            if(k==a.length){   
                if(n==0) System.out.println(s);  
                return;  
            }  

            String s2 = s;  
            for(int i=0; i<=a[k]; i++){  
                _____________________________;   //填空位置  
                s2 += (char)(k+'A');  
            }  
        }  

        public static void main(String[] args)  
        {  
            int[] a = {4,2,2,1,1,3};  

            f(a,0,5,"");  
        }  
    }  
public class Main  
{  
    public static void f(int[] a, int k, int n, String s)  
    {  
        if(k==a.length){   
            if(n==0) System.out.println(s);  
            return;  
        }  

        String s2 = s;  
        for(int i=0; i<=a[k]; i++){  
            f(a,k+1,n-i,s2);   //填空位置  
            s2 += (char)(k+'A');  
        }  
    }  

    public static void main(String[] args)  
    {  
        int[] a = {4,2,2,1,1,3};  

        f(a,0,5,"");  
       /* X星球要派出一个5人组成的观察团前往W星。
        其中:
        A国最多可以派出4人。
        B国最多可以派出2人。
        C国最多可以派出2人。*/
    }  
}  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值