⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1179.cpp

📁 这是哈尔滨工业大学acmOJ的源代码
💻 CPP
字号:
/*  This Code is Submitted by wywcgs for Problem 1179 on 2006-01-29 at 12:06:58 */ 
#include <cstdio>
#include <cstring>

const int MAX = 32;

class List {
private:
	int next[MAX], prev[MAX];
	bool e[MAX];
public:
	void make(int);
	void count(int&, int, bool) const;
	void erase(int);
};
void List::make(int n) {
	int i; next[0] = next[n] = 1; prev[n+1] = prev[1] = n;
	for(i = 1; i < n; i++) next[i] = i+1, prev[i+1] = i;
	memset(e, false, sizeof(e));
}
void List::count(int& b, int m, bool front) const {
	int i;
	for(i = 0; i < m; i++) {
		if(front) b = next[b];
		else b = prev[b];
		if(e[b]) i--;
	}
}
void List::erase(int m) {
	prev[next[m]] = prev[m]; next[prev[m]] = next[m]; e[m] = true;
}

int main()
{
	int n, m, k;
	List l;
	
	while(scanf("%d %d %d", &n, &k, &m) != EOF && n != 0) {
		l.make(n);
		int off1 = 0, off2 = n+1;
		while(n != 0) {
			l.count(off1, k, true); l.count(off2, m, false);
			l.erase(off1);	l.erase(off2);
			n--; printf("%3d", off1);
			if(off1 != off2) n--, printf("%3d", off2);
			putchar(n == 0 ? '\n' : ',');
		}
	}
	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -