順列を生成するためのアルゴリズムまたは擬似コードが必要です。文字数と順列数を表す2つの数字が与えられたとします。
私は26の英語の手紙からすべての順列を書かなければなりません。コードを書きましたが、問題があります。問題は入力3と6の場合で、私のコードはABC、ACB、BAC、BCA、CBA、CABを生成します。しかし、ABC、ACB、BAC、BCA、 CAB、CBAを生成するために必要です。
#include<iostream>
using namespace std;
int c, K, N;
void permute(char a[], int i);
void swap(char* x, char* y);
int main(void)
{
int t;
char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cin >> t;
for(int i=1; i<=t; i++)
{
cin >> N >> K;//N denotes number of letters and K denotes number of permutations
cout << "Case " << i <<":" << endl;
c=0;
permute(a,0);
}
return 0;
}
void permute(char* a, int i)
{
if(i==N-1)
{
for(int j=0; j<N; j++)
cout << a[j];
cout << endl;
c++;
return;
}
else
{
for(int j=i; j<N && c<K; j++)
{
swap(&a[i],&a[j]);
permute(a,i+1);
swap(&a[i],&a[j]);
}
}
return;
}
void swap(char* x, char* y)
{
char temp;
temp=*x;
*x=*y;
*y=temp;
return;
}