今盒子里有 n 个小球, AB 两人轮流从盒中取球, 每个人都可以看到另一个人取了多少个, 也可以看到盒中还剩下多少个, 并且两人都很聪明, 不会做出错误的判断
我们约定:
每个人从盒子中取出的球的数目必须是: 1,3,7 或者 8 个
轮到某一方取球时不能弃权!
A 先取球, 然后双方交替取球, 直到取完
被迫拿到最后一个球的一方为负方 (输方)
请编程确定出在双方都不判断失误的情况下, 对于特定的初始球数, A 是否能赢?
程序运行时, 从标准输入获得数据, 其格式如下:
先是一个整数 n(n<100), 表示接下来有 n 个整数然后是 n 个整数, 每个占一行 (整数 < 10000), 表示初始球数
程序则输出 n 行, 表示 A 的输赢情况 (输为 0, 赢为 1)
例如, 用户输入:
4
1
2
10
18
则程序应该输出:
0
1
1
0
注意:
请仔细调试! 您的程序只有能运行出正确结果的时候才有机会得分!
在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的
请把所有函数写在同一个文件中, 调试好后, 存入与考生文件夹下对应题号的解答. txt 中即可
相关的工程文件不要拷入
源代码中不能能使用诸如绘图 Win32API 中断调用硬件操作或与操作系统相关的 API
允许使用 STL 类库, 但不能使用 MFC 或 ATL 等非 ANSI c++ 标准的类库例如, 不能使用 CString 类型 (属于 MFC 类库)
- #include < iostream > using namespace std;
- int a[101];
- int b[] = {
- 1,
- 3,
- 7,
- 8
- };
- void cal() {
- a[0] = 1;
- a[1] = 0;
- a[2] = 1;
- a[3] = 0;
- a[4] = 1;
- for (int i = 5; i < 101; i++) {
- int x = i;
- int flag;
- for (int j = 0; j < 4 && x - b[j] > 0; j++) {
- int k = 0;
- flag = 1;
- while (b[k] <= x - b[j]) {
- if (!a[x - b[j] - b[k++]]) {
- flag = 0;
- break;
- }
- if (k == 4) break;
- }
- a[i] = flag;
- if (flag) break;
- }
- }
- }
- int main() {
- cal();
- int n;
- cin >> n;
- while (n--) {
- int x;
- cin >> x;
- cout << a[x] << endl;
- }
- }
来源: http://www.bubuko.com/infodetail-2515764.html