电影“变形金刚”中红蜘蛛有红绿蓝三色炸弹12枚,其中红色3枚,绿色3枚,蓝色6枚。打仗时,红蜘蛛要从12枚炸弹中选择8枚(也称为“12选8”),每种至少一枚。 如:从中取1枚红色炸弹、1枚绿色炸弹和6枚蓝色炸弹,一共8枚,表示为116。 编程任务:输出从12枚中选8枚炸弹的所有组合方式,每组之间使用空格隔开。 输入说明 无 输出说明 116 125 134 215 224 233 314 323 332 输入样例复制 无 输出样例复制 116 125 134 215 224 233 314 323 332。C语言实现
时间: 2024-02-11 16:09:17 浏览: 226
以下是C语言实现的代码:
```c
#include <stdio.h>
void dfs(int color[], int index, int selected[], int count, int sum) {
if (count == 8) {
printf("%d ", sum);
return;
}
for (int i = index; i < 12; i++) {
if (color[i] > 0) {
color[i]--;
selected[count] = i + 1;
dfs(color, i, selected, count + 1, sum * 10 + i + 1);
color[i]++;
}
}
}
int main() {
int color[] = {3, 3, 6};
int selected[8];
dfs(color, 0, selected, 0, 0);
return 0;
}
```
思路解析:
使用DFS搜索算法,逐个尝试每个位置上的炸弹,如果该颜色的炸弹仍有剩余,则继续递归搜索,否则则返回上一级。使用一个数组`color`记录每种颜色的炸弹数量,使用另一个数组`selected`记录已选中的炸弹的位置,`count`表示已选中的炸弹的数量,`sum`表示已选中的炸弹的编号。当`count`为8时,表示已选中8个炸弹,将其输出即可。最后在主函数中调用`dfs`函数即可。
阅读全文