以下のようにコード化して、3つの番号1,2,3のすべての順列を出力します。再帰を使用してすべての順列を出力します。
しかし、出力は次のようになります。
1,1,1
1,1,2
1,1,3
1,2,1
1,2,2
1,2,3-
コードは以下の通りである:
#include<stdio.h>
#include<conio.h>
void perm(int);
int a[10],l=2;
int main()
{
int k;
k=0;
perm(k);
getch();
return 0;
}
void perm(int k)
{
int i;
for(a[k]=1;a[k]<=3;a[k]++)
{
if(k==2)
{
for(i=0;i<3;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
else
{
k++;
perm(k);
}
}
}
P1。正しいコードを教えてください。
ハードコードされた 'if(k == 2) 'の条件は何ですか? –
'(k == 2)'の条件はうまくいくようです。しかし、あなたは[k]が以前に選択していなかったかどうかを確認する必要があります。 – jdarthenay
どの番号が使用されたかを把握する必要があります。そして配列にまだ入っていない番号だけを使用してください。 – user3386109