Tom 和 Mary 玩取石子的游戏:n 颗石子码成一堆,从 Tom 开始,两人轮流取石子,最少取 1 颗、最多取 2 颗,谁取到最后一颗石子,谁就获胜。两个人都极聪明,不会放过任何取胜的机会。请同样聪明的你编写程序,输入石子的数量,输出胜者的名字。
时间: 2023-05-18 13:03:42 浏览: 108
好的,让我来为您解答这个问题。这是一个经典的博弈论问题,可以使用数学方法来解决。如果石子数量是 3 的倍数,那么无论 Tom 怎么取,Mary 都可以通过取相同的数量的石子来保证自己取到最后一颗石子,因此 Mary 获胜。如果石子数量不是 3 的倍数,那么 Tom 可以先取一些石子,使得剩下的石子数量是 3 的倍数,然后按照上面的方法让 Mary 输掉。因此,如果石子数量是 3 的倍数,输出 Mary;否则输出 Tom。
相关问题
tom 和 mary 玩取石子的游戏:n 颗石子码成一堆,从 tom 开始,两人轮流取石子,最少取 1 颗、最多取 2 颗,谁取到最后一颗石子,谁就获胜。两个人都极聪明,不会放过任何取胜的机会。请同样聪明的你编写程序,输入石子的数量,输出胜者的名字。
题目描述:Tom 和 Mary 玩取石子的游戏:n 颗石子码成一堆,从 Tom 开始,两人轮流取石子,最少取 1 颗,最多取 2 颗,谁取到最后一颗石子,谁就获胜。两个人都极聪明,不会放过任何取胜的机会。请编写程序,输入石子的数量,输出胜者的名字。
思路:先输入石子数量,然后循环进行取石子直到石子数量为 0,分别用 Tom 和 Mary 取石子,每次取完石子之后判断石子数量是否为 0,若为 0 则输出胜利者的名字。
Python 代码如下:
n = int(input("请输入石子的数量:"))
while n > 0:
# 轮流取石子
take = 1 if n == 1 else 2
if n % 3 == 0:
take = 2
n -= take
# 判断是否胜利
if n == 0:
if take == 1:
print("Mary 获胜!")
else:
print("Tom 获胜!")
{"name": "Tom", "age": 18} C++正则表达式取age和name值
可以使用 C++ 的正则表达式库 `regex` 来实现,以下是示例代码:
```c++
#include <iostream>
#include <regex>
int main() {
std::string json_str = R"({"name": "Tom", "age": 18})";
std::regex age_regex(R"("age":\s*(\d+))");
std::regex name_regex(R"("name":\s*"(\w+)")");
std::smatch match;
if (std::regex_search(json_str, match, age_regex)) {
int age = std::stoi(match[1]);
std::cout << "age: " << age << std::endl;
}
if (std::regex_search(json_str, match, name_regex)) {
std::string name = match[1];
std::cout << "name: " << name << std::endl;
}
return 0;
}
```
输出结果为:
```
age: 18
name: Tom
```