试题 算法训练 智斗郭鸡

提交此题   评测记录  

资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  郭鸡是数学系里一个智商很低却十分好胜的同学。
  自从他在“a+b problem”这道题里AC以后,他便觉得自己比贵系同学们厉害了。
  于是他找到了你,发起了挑战,挑战内容就是一个叫取石子的游戏。
  这个游戏里,首先会有两堆石子,分别有a和b粒石子。
  两个人轮流操作,每次操作必须从其中一堆里取出一定粒数的石子(不能不取,可以取完)。
  在有限次操作后,会有一个人把最后的石子取走(最后一次当然不一定是只取一粒),那个人就是胜利者。
  由于郭鸡是自大的,于是他希望由你选择先取或后取。
  作为一名优秀的酒井人,你要在这个游戏里彻底打败郭鸡,使游戏开始以后郭鸡没有任何机会获得胜利。

输入格式

  输入共n+2行,第一行是一个整数n,表示郭鸡取石子次数。
  第二行是两个正整数a和b,意义见题目描述。
  下面n行,每行有两个整数,用空格隔开,表示郭鸡每次操作的堆号(1或2)及他取的石子数。
  (注意:在游戏过程中,事实上你是不知道郭鸡接下来会怎么取的,所以我们要求你每一步操作都要保证郭鸡失败)
  输入保证你能在他取完n次后的操作中获胜。

输出格式

  输出有两种可能。
  若你选择先取,则输出n+2行,第一行输出"Fisrt"表示先取,之后n+1行每一行是你每次操作的堆号(1或2)及取出的石子数。
  若你选择后取,则输出n+1行,第一行输出"Second"表示后取,之后n行每一行是你每次操作的堆号(1或2)及取出的石子数。
  "First"与"Second"的输出均不带引号。

样例输入

4
10 10
1 4
2 3
1 2
2 1

样例输出

Second
2 4
1 3
2 2
1 1

样例输入

1
1 2
1 1

样例输出

First
2 1
2 1

数据规模和约定

  0<a,b<1000

一开始想不出来,后来突然想明白了。这不就是脑筋急转弯类的东西嘛

假如两个堆是一样的,那么你就等他拿,他拿了多少你就在隔壁堆拿多少,那么必然他会先拿完一堆,这个时候你就一定会把另一堆拿完,即拿走最后一个,
如果是不一样的你就先拿,把他拿成一样的堆
然后就转变为了第一种情况
 

#include<iostream>
using namespace std;
int main()
{
	int n, a, b;
	cin >> n >> a >> b;
	if (a != b)
	{
		cout << "First" << endl;
		if (a < b)
		{
			cout <<"2 " << b - a << endl;
		}
		else
		{
			cout << "1 " << a - b << endl;
		}
	}
	else
	{
		cout << "Second" << endl;
	}
	for (int i = 0; i < n; i++)
	{
		int which, howmany;
		cin >> which >> howmany;
		switch (which)
		{
		case 1:
			cout <<"2 " << howmany << endl;
			break;
		case 2:
			cout << "1 " << howmany << endl;
			break;
		default:
			break;
		}
	}
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员训练入学考试题 1、方法中的内部类能不能访问方法中的局部变量,为什么? 2、编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 3、取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)... 4、有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。 5、编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 6、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。 7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 ? 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。 9、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路) 10、有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值