2010-06-29 4 views
1

십진법에서 이진수로 숫자를 변환하는 방법을 알고 있습니다. 나도 그래. 모두는 십진법에서 세 체계의 기본으로 변환하는 방법을 알고 있습니다.트위스트를 사용하는 세 시스템의 십진수

그러나 십진수를 하나의 기호가 첫 번째 기호가 될 수없고 나머지 두 기호로 둘러싸여 있어야하는 "이상한 기본 3"시스템으로 변환해야하는 곳에 문제가 있습니다. 따라서 하나의 기호는 다른 두 기호 중 하나가 사용되기 전에 반복 될 수 없습니다.

그래서, "0"첫 번째가 될 수 없으며, 그 반복 할 수 없습니다 기호 인 경우 : 존재하지 않아야 120, 110,202, 1020 개

번호 :

완벽하게 합법적 번호 01212은 (0이 앞에 오면 안됨), 120012 (0은 반복 할 수 없음)

십진법에서이 "이상한 기수 3"시스템으로 변환하는 알고리즘을 제안 할 수 있습니까?

고맙습니다.

+3

그렇다면 우리는 가치관에 대한 설명을 해줘야합니다. –

+0

그래서 시스템에서 값을 표현할 수 없다면 어떻게 할 것입니까? –

+0

예, 예제 변환 테이블은 매우 유용합니다. 어떤 시스템을 설명하는지, 또는 특정 숫자 (예 : 410)가 어떻게 번역 될지 잘 모르겠습니다. 2 중 숫자가 그냥 건너 뛰었습니까? 또는 410과 같은 숫자를 번역 할 수 없습니까? –

답변

0

원하는 매핑이 다음과 같습니까? 다니엘 매핑 @ 12 월 내지에 기반

0 <- illegal 
    1    0 
    2    1 
    10    2 
    11    3 
    12    4 
    20    5 
    21    6 
    22    7 
100 <- illegal        
101    8 
102    9 
110    10 
111    11 
112    12 
120    13 
121    14 
122    15 
200 <- illegal 
201    16 
202    17 
210    18 
211    19 
212    20 
220    21 
221    22 
222    23 
1000 <- illegal 
1001 <- illegal 
1002 <- illegal 
1010    24 
1011    25 
1012    26 
1020    27 
1021    28 
1022    29 
1100 <- illegal        
1101    30 
1102    31 
1110    32 
1111    33 
1112    34 
1120    35 
1121    36 
1122    37 
1200 <- illegal 
1201    38 
1202    39 
1210    40 
1211    41 
1212    42 
1220    43 
1221    44 
1222    45 
2000 <- illegal 
+0

여기서'1030'은 어디에 있습니까? –

+0

방금 ​​3 개가 오타라고 가정했습니다. 그렇지 않으면 4 개가됩니다. –

+0

네, 이것은 원하는 매핑입니다 – wanyx

0

이상한-3 계 :

x := n; // Original number 
y:= 0; 
do 
    y0:= y; 
    z:= DecToThree(x); // Convert x from Decimal to 3-based. 
    y:= IllRep(z);  // Calculate the number y of numbers with at least 2 
        // consecutive 0 with a representation in 3- based. 
    x:= n + y;  // Add illegal representations to original number; 
until (y = y0); 
Result:= DezToThree(x); // Convert x from Decimal to 3-based. 

예 :

16 -> 121 Y = 2 // {0, 100}

16 + 2 -> 200 y = 3 // {0, 100, 200}

16 + 3-2 - 주변> (201) Y = 3

다른 방법 :

y:= IllRep(x);  // calculate the number y of illegal representations 
z:= ThreeToDec(x); // convert x from 3-based to dec 
result:= z-y;  

지금 당신이 필요로하는 모든 특정 번호로 모든 불법 표현을 발견하는 기능입니다.

+0

또한 재귀를 해결하기 위해 루프를 사용하여 솔루션에 대한 생각 IllegalNumbersBelow (n) = IllegalNumbersBelow (n + IllegalNumbersBelow (n)). 이것에 대한 명백한 문제는 n이 커질 때 루프 반복이 더 많이 필요하다는 것입니다. –