您的位置:首页 > 编程语言 > C语言/C++

约瑟夫生死问题

2016-04-21 12:56 381 查看
#include<iostream>
using namespace std;
typedef struct node
{
int num;
node *next;
}*ptrn;
ptrn creatlist()
{

int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
ptrn e,tem,newnode;
e=0;
for(int i=0;i<30;i++)
{
newnode=new node;
newnode->num=a[i];
if(e==0)
{
e=newnode;
tem=e;
}
else
{
tem->next=newnode;
tem=newnode;
}
}
if(e)tem->next=e;
return e;
}
int length(ptrn &e)
{
ptrn tem=e;
int count=1;
while(1)
{
if(tem!=0&&tem->next!=e)
{
count++;tem=tem->next;
}
else
break;
}
return count;
}
void run(ptrn &e)
{
ptrn tem;
tem=e;
int count=0;
while(length(tem)>15)
{
count++;
if(count==8)
{
ptrn delenode;
delenode=tem->next;
tem->next=delenode->next;
delete delenode;
count=0;
}
tem=tem->next;
}
ptrn tem1;
tem1=tem;
cout<<"***************留在船上的人的编号为*********************"<<endl;
int b[15];
for(int i=0;i<15;i++)
{
b[i]=tem1->num;
tem1=tem1->next;
}
for(i=0;i<14;i++)
{
for(int j=0;j<14-i;j++)
{
if(b[j]>b[j+1])
{
int c;
c=b[j+1];
b[j+1]=b[j];
b[j]=c;
}
}
}
for(i=0;i<15;i++)
{
cout<<"                            "<<b[i]<<endl;
}
}
void main()
{
ptrn head;
head=creatlist();
run(head);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息