笨笨在小山顶上种了一棵果树,秋天了,果树结出了许多许多的果子,笨笨要去摘果子。 这是一棵可以结出3种不同果实的树,它的果实长在树枝的分叉处和树顶上。 果实分3种:普通果实、奇异果实和稀有果实。 这颗树的第一个分叉可以用一个2进制码表示(也就是许多的“1”和“0”), 而第一个分叉又分成2个分叉,分别用第一个分叉的前半段和后半段表示(从中间分开), 其他分叉也如此。分叉分到最后只剩下“1”或“0”时就成了树顶。 每个分叉只能分成2个分叉。 表示这棵树第一个分叉的2进制码必定是2的乘方位。 例如: 1 0 1 0 \ / \ / 10 10 \ / 1010 这就是一棵笨笨种的树。 三种果实的分辨方式为: 普通果实:既有“1”又有“0”; 奇异果实:只有“1”; 稀有果实:只有“0”。 每种果实的价值不同,普通果实1元,奇异果实2元,稀有果实5元。 笨笨能摘到的果实范围是一定的,他想知道他所能摘到果实的总价值。 像刚刚所示的“1010”树,它有3个普通果实,2个奇异果实和2个稀有果实, 若笨笨能摘到最高2,最低0,那么他就能得到所有的果实,果实的总价值为3*1+2*2+5*2=17元。 用c++解决
时间: 2024-04-10 20:34:08 浏览: 160
你可以使用C++编程语言来解决这个问题。下面是一个示例代码,演示如何根据输入的树的分叉表示,计算笨笨能够摘到的果实总价值:
```cpp
#include <iostream>
#include <string>
using namespace std;
int calculateFruitsValue(string tree) {
int normalFruits = 0;
int exoticFruits = 0;
int rareFruits = 0;
for (int i = 0; i < tree.size(); i++) {
if (tree[i] == '1' && tree[i + 1] == '0') {
normalFruits++;
}
else if (tree[i] == '1' && tree[i + 1] == '1') {
exoticFruits++;
}
else if (tree[i] == '0' && tree[i + 1] == '0') {
rareFruits++;
}
}
int totalValue = normalFruits * 1 + exoticFruits * 2 + rareFruits * 5;
return totalValue;
}
int main() {
string tree;
cin >> tree;
int totalValue = calculateFruitsValue(tree);
cout << "笨笨能得到的果实总价值为:" << totalValue << "元" << endl;
return 0;
}
```
你可以将树的分叉表示存储在字符串 `tree` 中,并将其作为参数传递给 `calculateFruitsValue` 函数。该函数会遍历树的分叉,根据不同的情况统计普通果实、奇异果实和稀有果实的数量,并计算总价值。
请确保在编译和运行代码之前,先在你的编译环境中安装好C++编译器。希望这个示例能帮助到你!如果有任何疑问,请随时提问。
阅读全文