这怎么做啊,请大神们给我参考下
题目描述n个人排成一圈,按顺时针方向依次编号1,2,3…n。从编号为1的人开始顺时针"一二"报数,报到2的人退出圈子。这样不断循环下去,圈子里的人将不断减少。最终一定会剩下一个人。试问最后剩下的人的编号。
输入
不超过1000组数据。
每组数据一行,每行一个正整数,代表人数n。 (1 <= n < 2^31)
输出
每组输入数据输出一行, 仅包含一个整数,代表最后剩下的人的编号。
样例输入
7
2
样例输出
7
1
#include <stdio.h> int main( void ) { for( unsigned n; scanf("%u",&n)==1; ) { unsigned f = 0; for( unsigned i=1; i<=n; ++i ) f = (f+2)%i; printf( "%u\n", f+1 ); } return 0; }
scanf("%d", &loop); count = 0; j = loop; for (i = 0; j > 0; i++) { j = j / 2; count++; } printf("最后编号:%d\n", (int)(2 * (loop - (pow(2, count - 1))) + 1));