これは、アルファベット文字列の順列を生成する私のソースコードのサンプル入力が出力されCで再帰的置換によってリーフ位置文字列を変更するにはどうすればよいですか?
Input:
1
3 8
Output:
Case 1:
ABC
ACB
BAC
BCA
CBA
CAB
私は、この出力のライン6日にライン5日で
CAB
と
CBA
を取得する必要がありますが、私は方法がわからない
それ。
#include <stdio.h>
int N, M, count;
char array[27];
void swap (char array[], int i, int j) {
char t;
t = array[i];
array[i] = array[j];
array[j] = t;
}
void perm (char array[], int n, int i) {
if(count == M)return;
int j;
if (i == n) {
for (j=0; j<n; j++) printf ("%c", array[j]);
count++;
printf ("\n");
return;
} else
for (j=i; j<n; j++) {
swap (array, i, j);
perm (array, n, i+1);
swap (array, i, j);
}
}
int main() {
int v[27], i, testCase, T;
int tmp;
char tmpC;
scanf("%d", &T);
for(testCase = 1; testCase <= T; testCase++){
scanf("%d %d", &N, &M);
for (i=0; i<N; i++){
v[i] = i+1;
tmp = i+65;
tmpC = tmp;
array[i] = tmpC;
}
printf("Case %d:\n", testCase);
count = 0;
perm (array, N, 0);
}
return 0;
}
@BlackMosesの形式を修正していただきありがとうございます。 :) –
@Weaher Vane ... Ok、私はあなたに同意します。しかし、私はスワップ機能を使用していますが、私の期待される出力を得る方法はありますか? –