2013-04-09 8 views
1

일련의 잘못 인코딩 된 base36 값이 있습니다.이 값은 "i"와 "o"가 누락 된 문자열을 사용하여 정수에서 인코딩되었습니다. 이제 정수로 다시 변환해야합니다 (C# 사용)문자열의 변형을 계산하십시오.

롤오버 효과 때문에 여러 순열이 있습니다.

"0"으로 할 수있는 균등 한 0 34 "1"수 중 동일한 1

35 그래서, 예를 들어 I 문자열 "A110"는 이러한 여섯 개 가지 값을 가지고있는 경우.

이 코드를 작성하는 방법을 파악하는 데 어려움을 겪고 있습니다. 내가 본 모든 예는 요소 집합의 변형을 가지고 있습니다. 예를 들면 다음과 같습니다.

CHAR [] = {A, B, C}

INT [] = {1, 2, 3}

그러나 제 경우가 너무 관여 조건문이 있고, 내 머리 상처를 만들고

. 누구든지 도와 줄 수 있습니까?

+3

변환이 고유하지 않은, 그리고 변환 다시 할 수있다 모호성을 포함하기 때문에 이것이 실제로 사용 가능한지 의심 스럽습니다. – David

+1

'a110'은 실제로 '10,1,1,0','10,1,1,34', '10,1,35,0','10,1,35,34'의 8 가지 값을 가질 수 있습니다. , '10,35,1,0','10,35,1,34','10,35,35,0','10,35,35,34'. 가능한 모든 결과를 제공하도록 코딩하는 것이 가능하지만, @David가 말했듯이, 아마도 당신에게 * 쓸만한 결과를주지 않을 것입니다. – Bobson

+0

@David 실용적이지는 않겠지 만 사람의 검사 목록을 작성하는 데 사용되어 다른 사람이 올바른 것으로 알고있는 사람을 선택하게 할 수 있습니다. – Brad

답변

0

다음 코드를 사용하여 관리했습니다. 나는 실제로 두 가지 조건과 두 가지 옵션이 있었기 때문에 실제로 예상했던 것보다 조금 더 단순했습니다. 재귀를 사용하고 문자열의 각 문자를 단계별로 처리합니다. 그 문자가 0 또는 1이면, 그 문자는 갈라서 문자열을 계속 작성합니다.

실제로 몇 개의 중복을 생성하므로 문자열 목록에 조건을 추가하여 추가하지 않으면 이미 존재하지 않습니다. 다른 사람이 날 지점 수 있다면 약간 더 논리는 내가 고맙겠에 문자열 "101"나는 다음과 같은 조합을 얻기위한

public string st = "101"; // hardcoded for now 
public char[] cs; 
public List<string> variations; 

static void Main() 
{ 
    cs = st.ToCharArray(); 
    variations = new List<string>(); 
    vary("",0); 
} 

static void vary(string m, int n) 
{  
    for (int i = n; i < cs.Count(); i++) 
    { 
     if (cs[i] == '0' || cs[i] == '1') 
     { 
      // recurse 
      combo(m + (cs[i] == '0' ? "0" : "1"), i + 1); 
      combo(m + (cs[i] == '0' ? "Y" : "Z"), i + 1); 
     } 
     m += cs[i]; 
    } 
    if(!variations.Contains(m)) 
     variations.Add(m); 
} 

101 
10Z 
1Y1 
1YZ 
Z01 
Z0Z 
ZY1 
ZYZ 
0

가능한 모든 입력 문자열 목록을 계산할 수 있습니다. 먼저 입력을 int 목록으로 읽습니다. 자, 당신은 그것들 각각이 (충분히 낮은 가치라면) 두 가지 중 하나 일 수 있다는 것을 압니다. 그러면 재귀 적 디센트를 통해 가능한 모든 입력을 반환하는 열거자를 만들 수 있습니다.

관련 문제