?? yuesefu.cpp
字號:
#include"iostream.h"
#include"malloc.h"
typedef struct node{
int num;
struct node* next;
}lnode;
lnode* creat_link(int n);//創建循環鏈表
void print_link(lnode* head);//輸出循環鏈表
void yuesefu(lnode* head,int n,int m);//約瑟夫環的實現
int main()
{
int n,m;//n是總的人數,m是數的個數
lnode* head;
cin>>n;
head=creat_link(n);
// print_link(head);
cin>>m;
yuesefu(head,n,m);
return 0;
}
lnode* creat_link(int n)
{
lnode* head;
lnode* p;
lnode* s;
int i;
head=(lnode*)malloc(sizeof(lnode));
head->num=1;
p=head;
for(i=2;i<=n;i++)
{
s=(lnode*)malloc(sizeof(lnode));
s->num=i;
p->next=s;
p=s;
}
p->next=head;
return head;
}
void print_link(lnode* head)
{
lnode* p;
p=head;
cout<<p->num<<endl;
p=p->next;
while(p!=head)
{
cout<<p->num<<endl;
p=p->next;
}
}
void yuesefu(lnode* head,int n,int m)
{
int count;//用于循環計數
lnode* pre;
lnode* p=head;
do
{
count=1;
while(count<m-1)
{
p=p->next;
count++;
}//此時count為m-1,p為要刪除的節點的前一節點
pre=p;
p=p->next;//找到要刪除的點的位置
pre->next=p->next;
cout<<p->num<<endl;
free(p);
head=pre->next;
p=head;
n--;
}while(n>=1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -