解答私信@m0_51085291 //2020-12-22
12 2020 22 解答 私信
2023-09-27 14:19:40 时间
一群小孩围成一圈,每个小孩都会带有一个随机的密码。然后设定一个数 m,从第一个小孩数起,数 到第 m 个的时候,该小孩离开。小孩离开时,其携带的密码将更新这个 m 值,顺序往下数的第 m 个小孩 会继续出列。依次这样数下去,最后一个小孩是胜利者,问:胜利者是第几个小孩?
【设计需求及分析】
使用单循环链表实现。程序开始需要设定以下值:
(1)有多少个小孩参与游戏(一般设定值小于 100);
(2)第一个报到哪个数必须出列 (一般设定值小于 100);
(3)随机生成每个小孩(约瑟夫环结点)携带的密码。:
【测试数据】
测试数据:
参与游戏的人数:6
报第一个出列数:8
小孩携带的随机密码(小孩编号:随机密码):
1:5 2:9 3:12 4:2 5:5 6:2
2 的小孩离队了,他携带的密码是 9
6 的小孩离队了,他携带的密码是 2
3 的小孩离队了,他携带的密码是 12
1 的小孩离队了,他携带的密码是 5
4 的小孩离队了,他携带的密码是 2
最后编号 5 的小孩获胜!
代码块:
/*根据CSDN几位战友的反馈,VC6.0下运行报错问题,自行百度搜索了一下,
在头一行加入头文件 include "stdafx.h" */
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#define MAXCHILD 100
#define MAXCOL 15
#define MAXRANDPASS 20
struct Child
{
int number;
int password;
Child *next;
};
void SetValue(int *childNum, int *firstOut);
void InputChildData(Child *children, int childNumb);
void Winner(Child *children, int childNumb, int *firstOut);
void SetValue(int *childNum, int *firstOut)
{
cout<<"参与游戏的人数:";
cin>>*childNum;
while(*childNum>=MAXCHILD)
{
cout<<"人数必须小于"<<MAXCHILD<<",请重新输入:";
cin>>*childNum;
}
cout<<"报第一个出列数:";
cin>>*firstOut;
while(*firstOut>=MAXCOL)
{
cout<<"出列数必须小于"<<MAXCOL<<",请重新输入:";
cin>>*firstOut;
}
}//SetValue
void InputChildData(Child *children, int childNumb)
{
Child *p;
int i;
cout<<"小孩携带的随机密码(小孩编号:随机密码):"<<endl;
for(i=0, p=children; i<childNumb; p=p->next, i++)
{
p->number=i+1;
p->password=rand()%MAXRANDPASS+1;
cout<<p->number<<":"<<p->password<<" ";
if(i==childNumb-1)
break;
p->next=new struct Child;
}
p->next=children;
cout<<endl;
}//InputChildData
void Winner(Child *children, int childNumb, int *firstOut)
{
Child *p;
int childCount=childNumb, step=*firstOut, i;
for(p=children, i=0; childCount!=1; p=p->next)
{
if(p->number==0)
continue;
i++;
if(i==step&&p->number!=0)
{
cout<<p->number<<" 的小孩离队了,他携带的密码是 "<<p->password<<endl;
step=p->password;
cout<<"step:"<<step<<endl;
p->number=0;
i=0;
childCount--;
}
}
for(p=children; !p->number; p=p->next);
cout<<"最后编号 "<<p->number<<" 的小孩获胜!"<<endl;
}//Winner
int main()
{
int *childNumber=new int;
int *firstOut=new int;
SetValue(childNumber, firstOut);
Child *child=new struct Child;
srand((unsigned)time(NULL));
InputChildData(child, *childNumber);
Winner(child, *childNumber, firstOut);
free(childNumber);
free(firstOut);
free(child);
system("pause");
return 0;
}
相关文章
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结
- 2020-12-20
- 2020-12-11
- 2020-12-08
- 2020-12-02
- Javascript 笔记与总结(2-12)联动菜单
- (数据科学学习手札12)K-means聚类实战(基于R)
- 《电路分析导论(原书第12版)》一1.2.3 固态电子时代
- 硝烟中的Scrum和XP-我们如何实施Scrum 12)发布计划 13)组合XP
- 【ESWIN编程大赛】五、2020年11月12日陈工直播笔记
- 【历史上的今天】12 月 23 日:Python 起源;TCP/IP 协议发明者出生;设计第一台 PC 的人诞生
- 【历史上的今天】12 月 3 日:世界上第一条短信;Fortran 语言之父诞生;百度贴吧上线
- 【历史上的今天】11 月 12 日:USB 3.0 发布;图灵机论文被发表;TinyOS 创作者诞生
- 2015年12周(2015-03-16~2015-03-22)
- Android系统时间制式的获取(24小时制式/12小时制式)及UTC与本地时间的转换
- CENtos7源码安装zabbix (v6.0.12)