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

주어진 문자열의 순열을 찾는 C 프로그램

<시간/>

배열에 문자열이 거의 없다고 가정합니다. 우리는 다른 줄에서 이들의 모든 순열을 찾아야 합니다.

따라서 입력이 string =["abc", "def", "ghi"]와 같으면 출력은

abc def ghi
abc ghi def
def abc ghi
def ghi abc
ghi abc def
ghi def abc

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • next_permutation() 함수를 정의하면 n, 문자열 배열 s가 필요합니다.
  • i를 초기화하려면:=n - 1, i> 0일 때 업데이트(i를 1만큼 감소), 다음을 수행합니다.
    • s[i]> s[i - 1])인 경우:
      • j :=나는 + 1
    • j
    • s[j] <=s[i - 1])인 경우:
      • 루프에서 빠져나오기
    • t :=s[i - 1]
  • s[i - 1] =s[j - 1]
  • s[j - 1] =t
  • i
  • t :=s[i]
  • s[i] :=s[n - 1]
  • s[n - 1] =t
  • 1을 반환
  • 초기화 i의 경우:=0, i
  • t :=s[i]
  • s[i] :=s[n - 1]
  • s[n - 1] =t
  • 0을 반환
  • 기본 방법에서 다음을 수행합니다.
  • next_permutation(n, strings)가 0이 될 때까지 무한히 다음을 수행{
    • 초기화 i의 경우:=0, i
    • 디스플레이 문자열[i] then (i가 n - 1과 같으면 다음 줄로 이동, 그렇지 않으면 공백 인쇄
  • 예시

    이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    #include <stdio.h>
    #include <string.h>
    int next_permutation(int n, char **s){
        for (int i = n - 1; i > 0; i--)
            if (strcmp(s[i], s[i - 1]) > 0){
                int j = i + 1;
                for (; j < n; j++)
                    if (strcmp(s[j], s[i - 1]) <= 0)
                        break;
                char *t = s[i - 1];
                s[i - 1] = s[j - 1];
                s[j - 1] = t;
                for (; i < n - 1; i++, n--){
                    t = s[i];
                    s[i] = s[n - 1];
                    s[n - 1] = t;
                }
                return 1;
            }
        for (int i = 0; i < n - 1; i++, n--){
            char *t = s[i];
            s[i] = s[n - 1];
            s[n - 1] = t;
        }
        return 0;
    }
    int main(){
        char *strings[] = {"abc", "def", "ghi"};
        int n = 3;
        do{
            for (int i = 0; i < n; i++)
                printf("%s%c", strings[i], i == n - 1 ? '\n' : ' ');
        } while (next_permutation(n, strings));
    }
    

    입력

    {"abc", "def", "ghi"}

    출력

    abc def ghi
    abc ghi def
    def abc ghi
    def ghi abc
    ghi abc def
    ghi def abc