Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

与えられた文字列の順列を見つけるCプログラム


配列に文字列がほとんどないとします。それらのすべての順列を異なる行で見つける必要があります。

したがって、入力がstrings =["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:=i + 1
    • j
    • s [j] <=s [i-1])の場合、次のようになります。
      • ループから抜け出す
    • t:=s [i-1]
  • s [i-1] =s [j-1]
  • s [j-1] =t
  • for 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]を表示します(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

    1. 非再帰関数を使用して数値のGCDを見つけるCプログラム

      問題 非再帰関数を使用して、指定された2つの数値の最大公約数(GCD)を見つけます。 解決策 非再帰関数を使用して、指定された2つの数値の最大公約数(GCD)を見つける方法を以下に説明します。 アルゴリズム 非再帰関数を使用して、指定された2つの数値の最大公約数(GCD)を見つけるには、以下のアルゴリズムを参照してください。 ステップ1 −開始 ステップ2 −整数aとbを読み取ります ステップ3 −関数G =GCD(a、b)ステップ6を呼び出します ステップ4 −G値を出力 ステップ5 −停止 ステップ6 −呼び出された関数:GCD(a、b) a. Initialize th

    2. 指定された文字列のすべての順列を出力するPythonプログラム

      この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −文字列の可能なすべての順列を表示するために必要な文字列が与えられます。 次に、以下の実装のソリューションを見てみましょう- 例 # conversion def toString(List):    return ''.join(List) # permutations def permute(a, l, r):    if l == r:       print (toString(a))    e