C++ 上机作业实验一

上机作业实验一

 

 

1、首先,所有参加游戏的日本人按顺序编号为1、2、3…N;

2、接下来每个日本人心里产生一个数字,这个数字称为序号为 N的人的密码P;

3、所有参加游戏的人按照编号站成一个圈,长老为游戏设置初始密码K,从编号为 1的人这里开始报数,报到 K的人退出队伍,然后将自己心中的密码 K2说出来,由下一个人继续从 1开始报数,报到 K2的人退出队伍,以此类推;

4、当队伍中剩下一个人的时候,这个人就是今天要出去采摘的日本人,他可能回不来了!

请各位同学在C++环境中设计程序,在用户输入了人数N、每个人的密码P和初始密码K的情况下,自动完成上面的游戏过程,输出先后离开队伍的人的序号序列,最后输出要去采摘的日本人,输出他的编号。请尽量采用更为形象的方式输出游戏过程。

#include"pch.h"
#include<iostream>
using namespace std;

struct JanMan //设置janman结构体,存储密码与对应的编号
{
	JanMan* m_pNext;//下一个人
	int m_nPassword;//自己想的密码
	int m_nNumber;	//编号
};

void PrintExitMan(JanMan* pPreMan, JanMan* pStartMan, int nPassword) //打印采摘者编号
{
	if (pPreMan == pStartMan)//如果第一个人就是密码匹配
	{
		cout << "要出去采摘的日本人的编号为:" << pStartMan->m_nNumber << endl;
		delete pStartMan;
		return;
	}
	for (int i = 0; i < nPassword - 1; i++)//循环直至密码遍历至采摘者
	{
		pPreMan = pStartMan;
		pStartMan = pStartMan->m_pNext;
	}
	pPreMan->m_pNext = pStartMan->m_pNext;
	cout << "编号为" << pStartMan->m_nNumber << "人退出队伍!" << "其密码为:" << pStartMan->m_nPassword << endl;
	nPassword = pStartMan->m_nPassword;
	delete pStartMan;
	PrintExitMan(pPreMan, pPreMan->m_pNext, nPassword);//递归调用自己

}
int main(int argc, char* argv[])
{

	int nNumber = 0;
	int nInitPassword = 1;
	cout << "请输入人数:";
	cin >> nNumber;
	cout << "请输入初始密码:";
	cin >> nInitPassword;
	JanMan* pStartMan = NULL;
	JanMan* pHead = NULL;

	//////////////////////////////////////////////////////////////////////////
	//初始化数据
	for (int i = 1; i <= nNumber; i++)
	{
		if (NULL == pStartMan)
		{
			pStartMan = new JanMan();
			pHead = pStartMan;
		}
		else
		{
			JanMan* pTmp = new JanMan();
			pStartMan->m_pNext = pTmp;
			pStartMan = pStartMan->m_pNext;
		}
		pStartMan->m_nNumber = i;
		cout << "请输入第" << i << "个日本人的密码:";
		cin >> pStartMan->m_nPassword;
		pStartMan->m_pNext = pHead;
	}
	//////////////////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////////
	//显示初始数据
	cout << "====================显示初始化数据==========================" << endl;
	pStartMan = pHead;
	for (int j = 1; j <= nNumber; j++)
	{
		cout << "编号为" << pStartMan->m_nNumber << "的人密码为:" << pStartMan->m_nPassword << endl;
		pHead = pStartMan;
		pStartMan = pStartMan->m_pNext;
	}
	cout << "=============================================================" << endl;


	cout << "==========================游戏开始===========================" << endl;
	cout << "初始密码为:" << nInitPassword << endl;
	//////////////////////////////////////////////////////////////////////////
	PrintExitMan(pHead, pHead->m_pNext, nInitPassword);//递归调用
	//////////////////////////////////////////////////////////////////////////
	cout << "=============================================================" << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43628888/article/details/89737041
今日推荐