C++实现:Zvonko将N个正整数放在地板上的一个圆圈内,并解释了规则: •第一个玩家接受任何数字。 •第二名玩家从与第一名玩家相邻的两个数字中选择一个。 •下一个玩家在到目前为止所取的任何数字旁边取一个数字,依此类推,直到数字用完。选择更多奇数(不能被2整除)的玩家获胜。 兹文科发挥得最好;他总是寻找一种能带来一定胜利或平局的策略。兹文科不知道伊万娜打得有多好。作为一名真正的骑士,他让伊万娜拥有了第一步。但伊万娜只在乎在大屏幕前坐在兹文科旁边,所以她寻求帮助。 编写一个程序,找出伊万娜能做出多少不同的第一步,这样她就有机会在之后获胜。 输入格式: 第一行输入包含一个整数N(1)≤N≤100),圆圈里有多少个数字。 第二行包含由单个空格分隔的N个整数。所有数字都将在1到1000(含)之间。没有两个数字是相同的。 输出格式: 输出所需的数字。
时间: 2023-12-10 09:38:22 浏览: 284
一个用c++实现的猜数字的游戏
以下是C++实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++)
cin >> nums[i];
int max_odd = 0, first_odd_index = -1;
for (int i = 0; i < n; i++)
{
if (nums[i] % 2 == 1)
{
int odd_count = 1;
int j = (i + 1) % n;
while (j != i && nums[j] % 2 == 0)
{
odd_count++;
j = (j + 1) % n;
}
if (odd_count > max_odd)
{
max_odd = odd_count;
first_odd_index = i;
}
}
}
if (first_odd_index == -1)
cout << 0 << endl;
else
cout << first_odd_index + 1 << endl;
return 0;
}
```
思路解析:
我们需要找出第一步怎么取,才能让伊万娜在之后获胜。根据题意,我们需要选择一个奇数,并尽可能多地选择相邻的奇数,这样下一位玩家就会有更少的奇数可选。
因此,我们可以枚举每个奇数作为第一步,然后从该奇数的后一位开始向后遍历,统计相邻的奇数个数。最后,我们选择相邻奇数最多的奇数作为第一步。
如果所有数字都是偶数,则无法满足题意,输出0。
阅读全文