c语言解决输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
时间: 2023-06-06 07:07:05 浏览: 281
可以使用递归方式解决该问题,具体步骤如下:
1. 定义一个数组,用于存放每个位置上的数字;
2. 以 n 为界限,从 1 开始依次枚举每个位置上可以选择的数字;
3. 对于每个位置,首先判断该数字是否已经被选过,如果没有被选过,将其填入该位置,并递归求解下一位数字;
4. 如果已经被选过,则跳过该数字;
5. 当最后一位数字被填好后,输出该数字序列。
C 代码实现如下:
void permutation(int n, int* a, int cur)
{
if (cur == n) {
for (int i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
printf("\n");
} else {
for (int i = 1; i <= n; ++i) {
int j;
for (j = 0; j < cur; ++j) {
if (a[j] == i) break;
}
if (j == cur) {
a[cur] = i;
permutation(n, a, cur + 1);
}
}
}
}
int main()
{
int n;
scanf("%d", &n);
int a[n];
permutation(n, a, 0);
return 0;
}
阅读全文