2017-11-28 8 views
-4

以下は、行列の形式です。文字の対角の組み合わせは許されず、縦と横の組み合わせのみが許されます。 誰でも特定のレベルに必要な組み合わせの数を計算する方法を提案できますか。 例:レベルが1であれば、1つの文字の組み合わせ、つまりA、B、C、D、E、F、G、H、つまり10の組み合わせのみが許可されます レベルが2ならば、 、BB、AB、AD、BC、BE、...というように、レベル2では合計36の組み合わせがあります。 入力が任意のレベル番号であれば、可能な組み合わせ数はどのように計算されますか?行列の2つの要素が存在しない4 * 3行列の組み合わせの総数の計算方法

A B C 
D E F 
G H I 
    J 

Iは次の式を使用してみました:

(n!/(r!(n-r)!) 

それ以降レベル2から正しく計算doesntの。 注:Jの両面には手紙がありません。

お勧めします。

+0

あなたはこれまでに何を試しましたか? – Kiki

+0

私は以下のコードを書きました – Rashmi

答えて

-1

@Thientvse は、これは私がコード化されたコードです...それは正しい出力を与える...あなたは私のコードが正しいかどうかを教えてくださいすることができ、それは、このシナリオ

import java.util.ArrayList; 
import java.util.Scanner; 
public class Game { 
    public static int combinationCounts(int input1){ 
     ArrayList<String> mainalternatestring = new ArrayList<String>(); 
     ArrayList<String> mainverticalstring = new ArrayList<String>(); 
     String sb = "ABC#DEF#GHI# J "; 
     String a=null,b=null,c=null,nw=null; 

     int mainindex = 0,counter,totalcount=10,index=0,mainindex_duplicate=0,count=1; 

     if(input1 > 1 && input1 <= 4){ 
      while(mainindex != 11){ 
       int level = 0; 
       counter = 0; 
       count=1; 
       char[] strtoworkon = new char[sb.length()]; 
       index=0; 

       if(mainindex != 0) 
        mainindex = mainindex+1; 

       for(int j = mainindex; count!= (sb.length()-mainindex) ; j++){ 
        if(level == input1) 
         break; 

        if(sb.charAt(j) == '#'){ 
         level++; 
         if (counter == 0){ 
          mainindex_duplicate = j; 
          counter = 1; 
         } 
        } 

        if(level <= input1){ 
         strtoworkon[index] = sb.charAt(j); 
         index++; 
        } 
        count++; 
       } 
       mainindex = mainindex_duplicate; 

       // for sideways combinations 
       for(int m = 0; m <= strtoworkon.length; m++){ 
        c = null; 
        if(strtoworkon[m] == ' ') 
         break; 
        if(!String.valueOf(strtoworkon).substring(m, m+(input1)).contains("#")){ 
         c = String.valueOf(strtoworkon).substring(m, m+(input1)); 

         if(!c.matches(".*[A-Z].*")) 
          break; 

         if(!mainalternatestring.contains(c)) 
          mainalternatestring.add(c); 

        } 
       } 

       //for vertical combinations 
       nw = "#" + (String.valueOf(strtoworkon)); 
       int counter1=0; 
       while(counter1 != 3){ 
        c=""; 
        for(int n = 0; n<= strtoworkon.length; n++){ 
         if(nw.charAt(n) == '#'){ 
          Character test = nw.charAt(n+counter1); 

          a = Character.toString(strtoworkon[n+counter1]).trim(); 
          if(a.contains("#")) 
           break; 
          c = a+c; 
          c.trim(); 
         } 
        } 
        if(!mainverticalstring.contains(c) && c.length() == input1) 
         mainverticalstring.add(c); 
        counter1++; 
       } 

       if(mainindex == 11) 
        break; 
      } 
      totalcount = totalcount + (2*mainalternatestring.size()) + (2*mainverticalstring.size()); 
     } 
     return totalcount; 

    } 

    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 
      int output = 0; 
      int ip1 = Integer.parseInt(in.nextLine().trim()); 
      output = combinationCounts(ip1); 
      System.out.println(String.valueOf(output)); 
    } 
} 
のためのすべてのテストケースを満たすかどうか
関連する問題