首页 > 代码库 > 华为历年试题(10约瑟夫环)

华为历年试题(10约瑟夫环)

约瑟夫环形问题

有30人将其编号,从头开始1,2,3数数,每到3将其删除,一共删去15个数。输出被删去的15个数

 

 

#include<iostream>using namespace std;struct LinkList{  int val;  LinkList* next;  LinkList(int a):val(a),next(NULL){}};LinkList *CreatList(int n){  LinkList *p = new LinkList(1);  LinkList *h  = p;  for(int i=2;i<=n;i++)  {     LinkList *p1 = new LinkList(i);      p->next = p1;     p = p->next;  }  p->next = h;  return h;}void del()//一共有30个人,要删除15个人,删除的数输出{   LinkList *h = CreatList(30);   //创建30个结点的链表   int num = 15;   LinkList *p = h,*p1 = h;      while(num)   {     num--;     p = p->next;     cout<<p->next->val<<" ";     p1 = p->next->next;     delete p->next;     p->next = p1;     p = p1;      }   cout<<endl;}void main(){        del();       }