Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

암호 퍼즐을 풀기 위한 C++ 프로그램

<시간/>

암호 산술 문제에서 일부 문자는 숫자를 할당하는 데 사용됩니다. 10개의 다른 문자가 산술 연산을 올바르게 수행하기 위해 0에서 9까지의 숫자 값을 보유하는 것과 같습니다. 두 단어가 주어지고 그 두 단어에 대한 덧셈의 답으로 다른 단어가 주어집니다. 예를 들어 'BASE'와 'BALL'이라는 두 단어가 있고 결과는 'GAMES'라고 말할 수 있습니다. 이제 기호 숫자로 BASE와 BALL을 추가하려고 하면 GAMES라는 답이 나옵니다.

참고 - 최대 10자여야 하며, 그렇지 않으면 해결할 수 없습니다.

입력

이 알고리즘은 세 단어를 사용합니다.

암호 퍼즐을 풀기 위한 C++ 프로그램

출력

0에서 9까지의 숫자가 어떤 문자에 있는지 보여줍니다.

이 경우는 이렇습니다.

편지 A
4 2 1 0 5 9 6


암호 퍼즐을 풀기 위한 C++ 프로그램

알고리즘

이 문제에서는 문자와 해당 값을 포함하는 노드를 정의합니다.

isValid(노드 목록, 개수, 단어1, 단어2, 단어3)

입력 - 노드 목록, 노드 목록의 요소 수 및 세 단어.
출력 - word1과 word2의 값의 합이 word3의 값과 같으면 참입니다.

word1의 오른쪽에서 왼쪽으로 각 문자 i에 대해 m :=1 시작, nodeList의 모든 요소 j에 대해 ch :=word1[i] 수행, nodeList[j].letter =ch이면 수행 :=val1 + (m * nodeList[j].value) m :=m * 10 done m :=word2의 오른쪽에서 왼쪽으로 각 문자 i에 대해 1, do ch :=word2[i]의 모든 요소 j에 대해 nodeList, do if nodeList[j].letter =ch, 다음 break done val2 :=val2 + (m * nodeList[j].value) m :=m * 10 done m :=오른쪽에서 왼쪽으로 각 문자 i에 대해 1 word3의 경우 nodeList의 모든 요소 j에 대해 ch :=word3[i]를 수행하고, nodeList[j].letter =ch이면 수행한 다음 val3 :=val3 + (m * nodeList[j].value) m을 중단합니다. =m * 10 val3 =(val1 + val2)인 경우 완료, true 반환 falseEnd 반환

순열(nodeList, count, n, word1, word2, word3)

입력 - 노드 목록, 목록의 항목 수, 할당된 문자 수 및 세 단어.
출력 - 합계를 풀기 위해 모든 문자에 값이 올바르게 할당된 경우 True입니다.

n개의 문자가 할당되면 시작하고 0에서 9까지의 모든 숫자 i에 대해 숫자 i가 사용되지 않으면 수행하고 nodeList[n].value :=i if isValid(nodeList, count, word1, word2, word3 ) =nodeList의 모든 항목 j에 대해 true, 문자와 해당 값을 표시합니다. done return true 0에서 9까지의 모든 숫자 i에 대해 fasle을 반환하고 숫자 i가 사용되지 않으면 수행하고 nodeList[n].value :=i는 i가 사용된 것으로 표시합니다. if permutation(nodeList, count, n+1, word1) , word2, word3), true를 반환하지 않으면 i를 사용하지 않은 것으로 표시합니다. 

예시

#include #include=0; i--){ //첫 번째 문자열의 숫자 찾기 char ch =s1[i]; for (j =0; j =0; i--){ //두 번째 문자열의 숫자 찾기 char ch =s2[i]; for (j =0; j =0; i--){ //세 번째 문자열의 숫자 찾기 char ch =s3[i]; for (j =0; j  0) { nodeList[j].letter =char(i + 'A '); j++; } } 순열 반환(uniqueChar, nodeList, 0, s1, s2, s3);}int main() { 문자열 s1 ="BASE"; 문자열 s2 ="볼"; 문자열 s3 ="게임"; if (solvePuzzle(s1, s2, s3) ==false) cout <<"해결 방법 없음";}

출력

찾은 솔루션:A =4 B =2 E =1 G =0 L =5 M =9 S =6