Можете обьяснить как работает эта функция(perm)
#include <stdio.h>
#define SWAP(a,b) {int temp = a; a = b; b = temp;}
#define N 10
void perm(char str[],int count,int t)
{
if (t==count-1){
for (int i=0;i<count;++i)
printf("%c",str[i]);
printf("\n");
}
else{
for (int j=t;j<count;++j){
SWAP(str[t],str[j]);
t++;
perm(str,count,t);
t--;
SWAP(str[t],str[j]);
}
}
}
int main()
{
int t=0;
char str[N]="";
int count=0;
printf("Enter a number:\n");
gets(str);
while(str[count]){
count++;
}
printf("res:\n");
perm(str,count,t);
return 0;
}
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
Эта функция рекурсивно выдает все варианты перестановки символов в строке. Аналог std::next_permutation(). Если введете 012, то получите
res:
012
021
102
120
210
201
Вот только макросами пользоваться - не самый лучший вариант. Можно наступить на грабли.
// вместо
#define N 10
// лучше использовать
const int N = 10;
А вместо макроса #define SWAP(a,b) {int temp = a; a = b; b = temp;} лучше использовать функцию.