【发布时间】:2019-06-03 22:05:25
【问题描述】:
所以我有这个 C 语言的作业问题,我在过去 5 个小时里一直在研究,但不知道出了什么问题。
问题陈述:
取 n 作为从 1 到 9 的位数,并打印所有可能形成的不重复数字的数字。例如如果 n = 3,则数字为 1、2、3,数字为 123、132、231、213、321、312。
输入:2 输出:12、21
输入:3 输出:123、132、231、213、321、312
这是我目前所做的:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 10
void print(int *num, int n)
{
int i;
for ( i = 0 ; i < n ; i++){
printf("%d", num[i]);
}
printf("\n");
}
int main()
{
int num[N];
int temp;
int i, n, j,k;
printf("\nNo of digits? : ");
scanf("%d", &n);
for(k=0; k<n; k++){
num[k] = k + 1;
}
for (j = 1; j <= n; j++) {
for (i = 0; i < n-1; i++) {
temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
print(num, n);
}
}
return 0;
}
我得到了最多 3 位数字的预期结果。 但是从 4 开始,它并没有显示所有的数字排列。
No of digits? : 4
2134
2314
2341
3241
3421
3412
4312
4132
4123
1423
1243
1234
设置计数器直到 n! 数组将超出索引。
那么如何正确计算所有排列呢?
【问题讨论】:
-
您的程序没有创建您声明的输出。请永远不要通过排序等方式修改输出。而是向我们展示程序真正打印的内容。当然也向我们展示了错误的输出。不仅是正确的案例。
-
回溯是一种方法,如果您对迭代解决方案感兴趣:geeksforgeeks.org/johnson-trotter-algorithm
-
我不同意重复标记,这里的问题比较简单,“Print all permutation in lexicographic order”的解决方案比较复杂,不能针对当前问题进行
标签: c permutation