5

重複の可能性:
文字のすべての順列で文字列を生成する

私は C++ の初心者で、本当に助けが必要です。再帰を使った順列のプログラムをやっています。これが私のコードですが、出力が奇妙です。同じ数字が何度も繰り返され、スペースがあります。問題が何であるかを見つけることができませんでした。または、さらに追加する必要があるかもしれません。私を助けてください。これが私のコードです:

#include <iostream>
using namespace std;
#define swap(x,y,t)  ((t)=(x), (x)=(y), (y)=(t))
void perm(char *list, int i, int n);

int main(){
    char a[4]={'a','b','c'};
    perm(a,0,3);
    //cout<<a<<endl;    
    return 0;
}

void perm(char *list, int i, int n){
    int j, temp;
    if (i==n){
        for (j=0; j<=n; j++)
            printf("%c", list[j]);
        printf("     ");
    }
    else {
        for (j=i; j<=n; j++){
            swap(list[i],list[j],temp);
            perm(list,i+1,n);
            swap(list[i],list[j],temp);
            cout<<list<<endl;
        }
    }
}
4

1 に答える 1

1

関数は正しいですが、正しく呼び出していません。

perm(a,0,3);

する必要があります

perm(a,0,2);

なんで?

for ループ:

for (j=i; j<=n; j++){

まで行くnのでn、有効なインデックスでなければなりません。

正常に動作します

于 2012-10-03T14:39:00.327 に答える