下列代码试图打印数字1-9的全排列组合。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include "stdio.h" #define N 9 int x[N]; int count = 0; void dump() { int i = 0; for (i = 0; i < N; i++) { printf("%d", x[i]); } printf("\n"); } void swap(int a, int b) { int t = x[a]; x[a] = x[b]; x[b] = t; } void run(int n) { int i; if (N - 1 == n) { dump(); count ++; return; } for (i = ___; i < N; i++) { swap(___, i); run(n + 1); swap(___, i); } } int main() { int i; for (i = 0; i < N; i++) { x[i] = i + 1; } run(0); printf("* Total: %d\n", count); } 其中run函数中缺失的部分应该依次为:解释为什么空缺的代码内部要填n n n
时间: 2024-04-26 13:22:31 浏览: 55
一个程序 请输入0~9之间的数
4星 · 用户满意度95%
空缺的部分应该依次填写n、n+1和a。
在这段代码中,run函数是一个递归函数,用于计算数字1-9的全排列组合。其中,变量n表示当前已经排列好的数字个数,x数组中存储了数字1-9,而swap函数用于交换数组中的两个数字。
在每次递归调用run函数时,我们需要从x数组中选取一个数字,放到当前排列的最后面。因此,我们需要在for循环中枚举x数组中从n开始到N-1的所有数字,依次将它们放到排列的最后面,并且递归调用run函数计算下一个数字的排列。在递归调用结束后,我们需要将刚才选取的数字交换回来,以便枚举下一个数字。
因此,第一个空缺的部分应该填写n,表示枚举x数组中从n开始到N-1的所有数字。
在第二个空缺的部分中,我们需要递归调用run函数计算下一个数字的排列。因此,我们需要将n+1传递给下一层递归函数,以表示当前已经排列好的数字个数增加了1。
最后一个空缺的部分应该填写a,表示当前选取的数字的下标。在swap函数中,我们需要将当前选取的数字与x数组中第a个数字进行交换。
阅读全文