与えられた文字列の順列を見つける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 [j] <=s [i-1])の場合、次のようになります。
- s [i]> 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
- 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
-
非再帰関数を使用して数値の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
-
指定された文字列のすべての順列を出力するPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −文字列の可能なすべての順列を表示するために必要な文字列が与えられます。 次に、以下の実装のソリューションを見てみましょう- 例 # conversion def toString(List): return ''.join(List) # permutations def permute(a, l, r): if l == r: print (toString(a)) e