1067: 顺序排号
Time Limit: 1 Sec Memory Limit: 128 MB Submit: 31 Solved: 16 [ ][ ][ ]Description
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
Input
初始人数n
Output
最后一人的初始编号
Sample Input
3
Sample Output
2
HINT
Source
水题,约瑟夫环。
最近快考试了,趁机刷刷水题,正好夯实一下基础。
思路:用链表做的,写的时候很容易出问题。
代码:
1 #include2 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< <
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< data<<' ';33 p = p->next;34 }while(p->data!=t);35 cout< next->next==p)42 break;43 else{44 Node * t = new Node;45 t = p->next;46 p->next = t->next;47 //cout< data< next;50 num=1;51 }52 }53 else{54 p = p->next;55 num++;56 }57 }58 cout< data<
Freecode :