题目连接:约瑟夫问题
#include <iostream>
#include <cstring>
using namespace std;
struct node{
int id;
node* pre;
node* nxt;
};
node* p;
int n, m;
bool in(){
delete p;
cin >> n >> m;
if(n == 0) return 0;
node* head = new node({1, NULL, NULL});
p = head;
for(int i = 2; i <= n; ++i){
p->nxt = new node({i, p, NULL});
p = p->nxt;
}
// p->id == n
p->nxt = head;
head->pre = p;
p = head;
return 1;
}
int main()
{
while(in()){
while(p->nxt != p){
for(int i = 1; i < m; ++i) p = p->nxt;
node* pp = p->pre;
pp->nxt = p->nxt;
p->nxt->pre = pp;
delete p;
p = pp->nxt;
}
cout << p->id << endl;
}
system("pause");
return 0;
}
576

被折叠的 条评论
为什么被折叠?



