ytu 1067: 顺序排号(约瑟夫环)

1067: 顺序排号

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 31   Solved: 16
[ Submit][ Status][ Web Board]

Description

有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

Input

初始人数n

Output

最后一人的初始编号

Sample Input

3

Sample Output

2

HINT

 

Source


 
  水题,约瑟夫环
  最近快考试了,趁机刷刷水题,正好夯实一下基础。
  思路:用链表做的,写的时候很容易出问题。
  代码
 1 #include <iostream>

 2 

 3 using namespace std;  4 struct Node{  5     int data;  6     Node* next;  7 };  8 int main()  9 { 10     Node *head = new Node; 11     Node *p = head; 12     int i,n; 13     cin>>n; 14     for(i=1;i<=n;i++){ 15         if(i==1){ 16             p->data=i; 17             p->next = NULL; 18             continue; 19  } 20         //cout<<p<<endl;

21         Node *t = new Node; 22         t->data = i; 23         t->next = NULL; 24         p->next = t; 25         p = p->next; 26  } 27     p->next = head; 28     p = head; 29     /* 输出测试 30  int t = head.data; 31  do{ 32  cout<<p->data<<' '; 33  p = p->next; 34  }while(p->data!=t); 35  cout<<endl; 36     */

37     //模拟报数

38     int num = 1; 39     while(1){ 40         if(num==2){ 41             if(p->next->next==p) 42                 break; 43             else{ 44                 Node * t = new Node; 45                 t = p->next; 46                 p->next = t->next; 47                 //cout<<t->data<<endl;

48  delete(t); 49                 p = p->next; 50                 num=1; 51  } 52  } 53         else{ 54             p = p->next; 55             num++; 56  } 57  } 58     cout<<p->data<<endl; 59     return 0; 60 }

 

Freecode : www.cnblogs.com/yym2013

你可能感兴趣的:(约瑟夫环)