阅读435 返回首页    go 阿里云 go 技术社区[云栖]


轮流拾取火柴问题

#include <iostream>

using namespace std;
/////////////////////////////////////////////////////////////////////////////////
//现有21根火柴,两人轮流取,每人每次可取走1-4根,不可多取,也不能不取,谁取最后//
//一根火柴则谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一 //
//方为“常胜将军”。                                                           //
/////////////////////////////////////////////////////////////////////////////////
int main()
{
	int nSticks = 21;
	int nManTaken = 0;
	int nMerchineTaken = 0;
	
	cout << ">> ----------------------- Game Begin ------------------" << endl;
	nSticks -= 1;  //the last stick must be taken by man
	while (nSticks)
	{
		cout << "How many stick do you wish to take(1~4)?";
		do 
		{  //保证输入的数是合法的
			cin >> nManTaken;
			if (nManTaken >4 || nManTaken < 1)
			{
				cout << "input 1~4 : "; 
			}
		} while (nManTaken >4 || nManTaken < 1);

		nSticks -= nManTaken;
		cout << (nSticks + 1) << " stick left in the pile." << endl;	
		
		if (nSticks >= 5)
		{			
			nMerchineTaken = 1;
		}
		else 
		{
			switch (nSticks)
			{
			case 1:
				nMerchineTaken = 1;
				break;
			case 2:
				nMerchineTaken = 2;
				break;
			case 3:
				nMerchineTaken = 3;
				break;
			case 4:
				nMerchineTaken = 4;
				break;
			}
		}
		nSticks -= nMerchineTaken;
		cout << "compute take " << nMerchineTaken << " stick." << endl;
		if (nSticks > 0)
		{
			cout << (nSticks + 1) << " stick left in the pile." << endl;	
		}
		else 
		{
			cout << " 1 stick left in the pile." << endl;
			cout << "How many stick do you wish to take(1~1)?";
			do 
			{  //保证输入的数是合法的
				cin >> nManTaken;
			} while (nManTaken != 1);

			cout << " You have taken the last stick." << endl;
			cout << " * * * You lose!" << endl;
		}										
	}
	cout << ">> ----------------------- Game Over ------------------" << endl;
	return 0;
}

最后更新:2017-04-02 15:15:31

  上一篇:go 工信部或将召集国内各大搜索引擎
  下一篇:go 1到n的全排列