```cpp
include
int main() {
int i, j, k;
int sum = 0;
for (i = 0; i <= 33; i++) { // 大马最多33匹
for (j = 0; j <= 50; j++) { // 中马最多50匹
k = 100 - i - j; // 小马的数量
if ((3 * i + 2 * j + k / 2) == 100 && (k % 2 == 0)) { // 根据题意进行判断
std::cout << "大马 "<< i << " 匹, 中马 "<< j << " 匹, 小马 "<< k << " 匹" << std::endl;
sum++;
}
}
}
std::cout << "共有 " << sum << " 种驮法" << std::endl;
return 0;
}
```
代码解释:
变量定义
`i`, `j`, `k` 分别表示大马、中马和小马的数量。
`sum` 用于记录驮法的总数。
循环遍历
外层循环遍历大马的数量,范围是0到33匹。
中层循环遍历中马的数量,范围是0到50匹。
内层循环计算小马的数量,即 `k = 100 - i - j`。
条件判断
检查总马数是否为100匹:`i + j + k == 100`。
检查总驮数是否为100担:`3 * i + 2 * j + k / 2 == 100`。
小马的数量必须是偶数,因为两匹小马驮1担货:`k % 2 == 0`。
输出结果
输出每种驮法的大马、中马和小马的数量。
输出驮法的总数。
建议:
该问题可以通过穷举法(即遍历所有可能的组合)来解决,代码中的循环结构确保了所有可能的组合都被考虑到。
由于题目中给出了大马和中马的数量范围,因此在实际编程中,可以适当减少循环的次数以提高效率。