约瑟夫生死问题

#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);
}

原文地址:https://www.cnblogs.com/zztong/p/6695297.html