여러 줄 반복
과제
Tumba-Yumba 부족 언어의 알파벳으로; 네 글자: "K", "L", "M" 및 "N". 이 알파벳의 문자로 만들 수 있는 n
개의 문자로 구성된 모든 단어를 표시해야 합니다.
문제는 더 작은 문제로 축소될 수 있는 일반적인 무차별 대입 문제입니다.
단어를 순차적으로 문자로 대체합니다.
단어의 첫 번째 위치는 알파벳 4자(K. L, M, N) 중 하나일 수 있습니다.
문자 K
를 먼저 넣겠습니다. 그런 다음 첫 번째 문자 K
가 있는 모든 변형을 가져오려면 나머지 n - 1
위치 등에서 문자의 가능한 모든 조합을 열거해야 합니다. (그림 참조).
따라서 문제는 길이가
n - 1
인 네 가지 문제를 해결하는 것으로 축소됩니다.
n자를 재귀적으로 반복
w[0]='K';; // 마지막 L-1 문자를 반복합니다.
w[0]='L';; // 마지막 L-1 문자를 반복합니다.
w[0]='M';; // 마지막 L-1 문자를 반복합니다.
w[0]='N'; // 마지막 L-1 문자를 반복합니다.
w
- 작업 단어를 저장하는 문자열.
따라서 우리는 재귀를 얻었습니다. 재귀 절차의 형태로 문제의 해결책을 마련할 수 있습니다.
재귀가 언제 끝날지 결정하는 것이 남아 있습니까? 모든 문자가 설정된 경우, 즉 설정된 문자의 수는 n
입니다. 이 경우 결과 단어를 화면에 표시하고 절차를 종료해야 합니다.
C# 프로그램은 다음과 같습니다.
<사업부>
// w - 변경 가능한 매개변수(문자열 결과)
// TumbaWords 프로시저는 알파벳을 문자열로 전달하고,
// 단어 단어와 이미 설정된 문자 수(처음에 – 0)
정적 무효 TumbaWords( 문자열 A, 참조 문자열 w, int N )
{
if (N == w.Length) // w.Length - 문자열의 문자 수
{
// 모든 문자가 이미 해당 단어로 설정된 경우
// 그런 다음 문자열을 출력하고 프로시저를 종료해야 합니다.
Console.WriteLine(w);
반품;
}
for ( int i = 0; i < w.Length; i ++ ) // 위의 조건이 거짓인 경우(즉, 모든 문자가 간격을 두지 않고,
{
// 위의 조건이 false인 경우(즉, 모든 문자가 공백이 아닌 경우
// 그런 다음 루프에서 알파벳의 모든 문자를 살펴보고
// 번갈아 가며 첫 번째 여유 공간에 문자를 놓습니다.
w += A[i];
TumbaWords(A, ref w, N+1);
w = w.Remove(w.Length - 1); // 그런 다음 마지막으로 추가된 문자를 제거합니다.
// 동일한 접두사를 가진 새 단어를 만들기 위해
}
}
정적 무효 메인()
{
int n = Convert.ToInt32(Console.ReadLine());
문자열 단어 = "";;
TumbaWords("KLMN", 참조 단어, 0);
}
참고 w
는 변경 가능한 매개변수(결과 문자열)입니다!
Problem
"tumba-yumba" 부족 언어의 알파벳으로; 네 글자: "K", "L", "M" 및 "N". 이 알파벳의 문자로 만들 수 있는 n
개의 문자로 구성된 모든 단어를 표시해야 합니다.
(c) 케이유. 폴리야코프