用C语言怎么打出来,刚学不久。

报数序列(约瑟夫环)。N个人围成一圏,并按顺时针依次编号1-N。从编号为1的人开始,按顺时针方向每隔一人选出一个,剩下的人重新围成一圏,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(3≤N≤50)

从N到1循环,将每个数对2求对数,如果结果给整数就输出,然后跳出循环。

题目意思应该是1号人开始剔除吧。可以使用队列或者链表维护序列,以队列为例,先把n个人依次入对,每隔一个人出队一次,隔着的这个人就先出队再入队,模拟约瑟夫环。使用STL的队列很方便,也可以自己写一个队列,这里直接就用STL的queue了

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e6 + 100;
const double eps = 1e-6;
int Data[MAXN];
queue<int> q;
int main(){
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int n;
    cin >> n;
    for(int i=1;i<=n;i++) q.push(i);
    while(q.size() > 2){
        q.pop();
        q.push(q.front());
        q.pop();
    }
    while(!q.empty()){
        cout << q.front() << "\n";
        q.pop();
    }
    return 0;
}