使用c语言编写一递归程序求出所有用7,8,9组成且各位数字互不相同的3位数就是要求7,8,9这3个数字的全排列,计算全排列可以采用递归的方法用函数void find(int k)来处理如何放第k个数,同时还要有一个数组int Pos[3来表示每个位置上的数字这样可以避免两个数字放在同一位置。
时间: 2023-06-13 19:08:58 浏览: 63
好的,这是一个比较经典的递归问题,下面是代码实现:
```c
#include <stdio.h>
int Pos[3]; // 数字位置数组
void find(int k) {
if (k == 3) { // 递归出口,已经填满3个位置
printf("%d%d%d\n", Pos[0], Pos[1], Pos[2]);
return;
}
for (int i = 7; i <= 9; i++) { // 遍历7、8、9三个数字
int j;
for (j = 0; j < k; j++) { // 判断当前数字是否已经在前面的位置出现过
if (Pos[j] == i) {
break;
}
}
if (j == k) { // 如果当前数字在前面的位置都没有出现过,则可以放到第k个位置上
Pos[k] = i;
find(k + 1); // 递归调用,处理下一个位置
}
}
}
int main() {
find(0); // 从第0个位置开始填数字
return 0;
}
```
这段代码中,我们使用了一个 `Pos` 数组来表示每个位置上的数字,`find` 函数就是递归函数,它的参数 `k` 表示当前要填的位置。首先判断是否已经填满了3个位置,如果是,则输出这个数字组合;否则遍历7、8、9三个数字,判断当前数字是否已经在前面的位置出现过,如果没有出现过,则可以放到第k个位置上,递归调用 `find(k+1)` 处理下一个位置。
最终输出的结果就是所有用7、8、9组成且各位数字互不相同的3位数的全排列。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)