题目:国庆节临近,某企业老板想给员工们发放礼物,但是发礼物的顺序并没有决定,所以老板决定将员工们编号为1,2,3…m,员工们(m个)按照1-m的顺序围坐一圈。从第1个开始数,每数到第n个,这个员工就会拿到礼物并离开此圈,并从下一个员工开始重复该过程,直到所有人都拿到礼物。输入m和n,输出最后一个拿到礼物的员工编号。
下面是我的代码,在VS上成功运行,且尝试的情况都正确输出;但提交到oj上一直显示错误,请问哪里存在问题?
#include<iostream>
using namespace std;
class list;
class node {
friend list;
public:
node(int i) { num = i; next = NULL; }
node* getnext() { return next; }
void removeafter() {
node* p = next;
next = next->next;
delete p;
}
private:
int num;
node* next;
};
class list {
public:
list() { head = tail = NULL; }
list(node* p) { head = tail = p; }
list(int m) {
node* it = new node(1);
node* before = it;
head = it;
for (int i = 2; i <= m; i++) {
it = new node(i);
before->next = it;
before = it;
}
tail = it;
tail->next = head;
}
~list() {
node* q = tail;
node* p = head;
while (p != q) {
q->next = p->next;
delete p;
p = q->next;
}
delete tail;
}
int length();
int last(int m);
private:
node* head, * tail;
};
int list::length() {
if (head == NULL)
return 0;
int n = 1;
node* it = head;
while (it != tail) {
it = it->next;
n++;
}
return n;
}
int list::last(int n) {
node* p = tail;
node* q = head;
while (p != q) {
for (int i = 1; i < n; i++) {
p = p->next;
q = q->next;
}
p->next = q->next;
delete q;
q = p->next;
}
return p->num;
}
int main() {
int m, n;
cin >> m >> n;
if (m <= 0 || n <= 0) {
cout << "invalid input!\n";
return 0;
}
list* thelist = new list(m);
cout << endl << thelist->last(n);
}