有两艘船,载重量分别是 c1、 c2,n 个集装箱,重量是 wi (i=1…n),且所 有集装箱的总重量不超过 c1+c2。确定是否有可能将所有集装箱全部装入两艘船。 输入:多个测例,每个测例的输入占两行。第一行一次是 c1、c2 和 n(n<=10);第 二行 n 个整数表示 wi (i=1…n)。n 等于 0 标志输入结束。 输出:对于每个测例在单独的一行内输出 Yes 或 No,在给出判断结果的同时,也输出哪个集装箱被放在了哪个船上。用c语言书写,并给出代码
时间: 2024-03-19 15:45:50 浏览: 82
以下是该问题的 C 语言代码实现,包括输入、判断和输出。
```c
#include <stdio.h>
#define MAX_N 10
int main() {
int c1, c2, n, w[MAX_N], i, j, k, flag;
while (1) {
scanf("%d%d%d", &c1, &c2, &n);
if (n == 0) break;
for (i = 0; i < n; i++) {
scanf("%d", &w[i]);
}
flag = 0;
for (i = 0; i < (1 << n); i++) { // 枚举所有情况
int sum1 = 0, sum2 = 0;
for (j = 0; j < n; j++) { // 判断船装载情况
if ((i >> j) & 1) {
sum1 += w[j];
} else {
sum2 += w[j];
}
}
if (sum1 <= c1 && sum2 <= c2) { // 能装载完成
printf("Yes\n");
for (k = 0; k < n; k++) {
if ((i >> k) & 1) {
printf("%d ", k + 1);
printf("on ship1\n");
} else {
printf("%d ", k + 1);
printf("on ship2\n");
}
}
flag = 1;
break;
}
}
if (!flag) { // 无法装载完成
printf("No\n");
}
}
return 0;
}
```
该程序的思路是先读入载重量和集装箱重量,然后采用位运算的方式来枚举所有情况,判断能否将所有集装箱全部装入两艘船中,最后输出结果。
阅读全文