昨天晚上友人让我帮其调试程序,关于约瑟夫问题的一个程序。本人孤陋寡闻,之前没有听过约瑟夫问题(亦或是听过但忘了),所以瞬间一头雾水。在友人大致讲解了思路之后,大概清楚了这个约瑟夫问题是要干什么了。
以下是本人亲自写的关于友人所提要求的程序,为了对抗自己的健忘症,所以还是记下来吧。
#include<iostream>
#include<string>
using namespace std;
struct Node
{
int m_data;
Node* m_next;
Node(int data=0):m_data(data)
{
m_next=NULL;
}
};
void create(Node** head,int n)
{
if(n<=0)
{
*head=NULL;
return;
}
*head=new Node(1);
Node* temp=*head;
for(int i=1;i<n;i++)
{
temp->m_next=new Node(i+1);
temp=temp->m_next;
}
temp->m_next=*head;
}
void ysf_loop(Node* head,int start,int step)
{
if(head==NULL || start<0 ||step<=0)
return;
Node* curr=head;
Node* prev=curr;
while(start--)
{
prev=curr;
curr=curr->m_next;
}
while(curr->m_next!=curr)
{
for(int i=1;i<step;i++)
{
prev=curr;
curr=curr->m_next;
}
cout<<curr->m_data<<" ";
prev->m_next=curr->m_next;
delete curr;
curr=prev->m_next;
}
cout<<curr->m_data<<endl;
delete curr;
}
int main()
{
int num,start,step;
cin>>num>>start>>step;
Node* head;
create(&head,num);
ysf_loop(head,start,step);
system("pause");
return 0;
}