2017-11-28 3 views
-4

아래의 행렬 형식입니다. 문자의 대각선 조합은 허용되지 않으며, 수직 및 수평 조합 만 허용됩니다. 누구나 특정 레벨에 필요한 조합 수를 계산하는 방법을 제안 할 수 있습니까? 예 : 레벨이 1이면 1 문자 조합 만 허용됩니다. 예 : A, B, C, D, E, F, G, H, I 즉 10 개 조합 레벨이 2라면 가능한 조합은 AA입니다. , BB, AB, AD, BC, BE, ... 등 레벨 2에 대해 총 36 개의 조합이 있습니다. 입력이 임의의 레벨 번호라면, 가능한 조합 수는 어떻게 계산합니까? 행렬에 2 개의 요소가없는 4 * 3 행렬에 대한 총 조합 수를 계산하는 방법

A B C 
D E F 
G H I 
    J 

나는이 수식을 사용하여 시도 :

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

을하지만 이후 레벨 2에서 제대로 계산 나던. 참고 : J의 양쪽에 문자가 없습니다.

좋습니다.

+0

지금까지 시도한 것은 무엇입니까? – Kiki

+0

아래 코드를 wriiten했습니다. – 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)); 
    } 
} 
에 대한 모든 테스트 케이스를 만족 여부