#include
#include
using namespace std;
const int MAX = 100;
struct node //定义的结点结构体
{
int number; //这个人的序号
int data; //他的密码
struct node *next; //连接的下一个人
};
int getinput( char str[] ) // 用来处理输入,并返回一个有符号的整型数
{
int len,i,j,ans;
bool isnege=false,wrong=false;
while(1) //如果输入不正确,会重新提示输入,直至正确输入为止
{
len=strlen(str);
isnege=false,wrong=false;
ans=0;
for(i=0;i
if( str[i] == '-' && !ans ) isnege=true;
else if( str[i] >= '0' && str[i] <= '9' ) ans=ans*10+(int)(str[i]-'0');
else
{
cout<<"输入有错!请重新输入:";
cin>>str;
wrong=true;
break;
}
}
if(!wrong)
break;
}
return isnege?-ans:ans;
}
int menu() //菜单函数
{
char input[MAX+1];
cout<
cin>>input;
return getinput(input);
}
void begin() //核心函数,用于模拟报数过程
{
struct node *list=NULL; //链表变量
int num,i,startm=0;
char input[MAX+1];
while( 1 ) //这个循环用于输入人数,直至正确为止……
{
cout<<"\t 请输入人数 N :";
cin>>input;
num=getinput(input);
if( num >0 ) //人数大于0则退出这个循环,否则继续输入
break;
else
{
cout<<"\t 输入错误!"<
}
struct node *one,*pre=list;
for( i = 0 ; i < num ; i++ ) //这个循环用于创建结点,并连接起来形成链表
{
one = new struct node; //创建结点
one->next=NULL;
one->number=i+1;
while( 1 ) //这个循环用于输入第几个人的信息,直至正确输入信息为止……
{
cout<<"\t 请输入第 "< cin>>input;
one->data=getinput(input);
if( one->data >0 ) //如果大于0则退出,否则继续
break;
else
{
cout<<"\t 输入错误!"<
}
if( !list ) //将结点插入链表中
{
list=one;
pre=list;
}
else
{
pre->next=one;
pre=pre->next;
}
}
while( 1 ) //输入报数的上限,直至正确输入为止
{
cout<<"\t 请输入报数上限 M :";
cin>>input;
startm=getinput(input);
if( startm >0 )
break;
else
{
cout<<"\t 输入错误!"<
}
struct node *cur=list,*todele;
pre->next=list; //将最后一个结点的指针指向头结点,形成一个环
for( i=1,cur=list,pre=list; ; ) //开始进行报数模拟
{
if( i == startm ) //如果当前报数等于要出列的数,则将这个结点从链表中删除,并重新清零报数
{
todele = cur;
cout<<"\t第 "<< cur->number <<" 个人出列! 报数为 "<< i <
if( 0 == num ) //如果所有的人出列则退出循环
break;
startm=cur->data; //将这个人的密码作为下一次报数
pre->next=cur->next; //删除该人
cur=cur->next;
i=1; //清零报数
delete todele;
}
else
{
pre=cur; //报数过程
i++;
cur=cur->next;
}
}
}
int main()
{
bool continu=true;
while( continu )
{
switch( menu() )
{
case 1:begin();break;
case 2:continu=false;break;
default:;break;
};
}
return 0;
}
想发到你邮箱,老是收到退信!