一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
  
输入格式:
输入在一行中给一个正整数N(\le≤1000)。

输出格式:
在一行中输出当选猴王的编号。

样例输入:

11

样例输出:

7

程序代码:



#include<iostream> #include<malloc.h> using namespace std; struct node { int data; struct node* next; }; node* init(node* a,int n); int main() { int n; cin>>n; node* l=(node*)malloc(sizeof(node)); l=init(l,n); node* p =l; /*while(p->next!=l) { cout<<p->data; p=p->next; } cout<<p->data;*/ p=l; int count = 0; while(p->next!=p) { count++; if(count==2) { node* temp; temp = p->next; p->next=p->next->next; free(temp); count = 0; } p=p->next; } cout<<p->data; return 0; } node* init(node* a,int n) { a->next = NULL; a->data= 1; node* p=a; if(n==1) { a->next=a; return a;} int i = 2; node* s; while(i<=n) { s= (node*)malloc(sizeof(node)); s->data = i;  s->next=NULL; p->next=s; p=p->next; i++; } s->next = a; return a; } 

运行结果: