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

               分小组

            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人。*/
    }  
}  

猜你喜欢

转载自blog.csdn.net/HZPHYT/article/details/88557106