N个人围成一圈顺序编号,从1号开始按1、2、3顺序报数,报3者退出圈外,其余的人再从1、2、3开始报数,报3的人再退出圈外,依次类推。请按退出顺序输出每个退出人的原序号。
思路:建立单循环链表,用两个指针表示,依次修改指针,删除报到3的指针.....
#include <iostream>using namespace std;typedef struct node{ int num; struct node*next;}LNode;int main(){ LNode *head,*p,*q; int n; cout<<"请输入总人数:"; cin>>n; p=(LNode*)malloc(sizeof(LNode));//申请头结点 p->num=1; p->next=NULL; head=p; for(int i=1;i<n;++i) { p->next=(LNode*)malloc(sizeof(LNode)); p=p->next; p->num=i+1; } p->next=head; p=head; cout<<"输出序列:"<<endl; while(p->next!=p) { q=p->next; p=q->next; q->next=p->next; cout<<p->num<<" "; delete p; p=q->next; } cout<<p->num<<endl; delete p; return 0;}
新闻热点
疑难解答