first commit
This commit is contained in:
97
2010-06-09/10015.cpp
Normal file
97
2010-06-09/10015.cpp
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
date:107/10/13
|
||||
author:Chen Yi Jing
|
||||
|
||||
人圍成圈,用質數去繞圈,質數數完被點到的人會被殺掉,求最後倖存者
|
||||
1. TLE
|
||||
*/
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
//將前 3500 個質數都算出來
|
||||
int p[3502] = {0};
|
||||
int number = 4;
|
||||
int index = 3;
|
||||
|
||||
p[1] = 2;
|
||||
p[2] = 3;
|
||||
|
||||
while (p[3501] == 0) {
|
||||
for (int i = 2; i < number / 2 + 1; i++) {
|
||||
if(number % i == 0) {
|
||||
break;
|
||||
}
|
||||
if(i == number / 2) {
|
||||
p[index] = number;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
number++;
|
||||
}
|
||||
|
||||
|
||||
//輸入的部份
|
||||
int n = 0;
|
||||
int copy_n = 0;
|
||||
|
||||
while(cin >> n) {
|
||||
copy_n = n;
|
||||
|
||||
int point = 0; //用來看現在數到哪個人
|
||||
int counter = 0; //用來倒數質數的
|
||||
int num[n + 1]; //某人是否存活 1:活 0:死
|
||||
|
||||
//初始化為 1
|
||||
for (int k = 0; k <= n; k++) {
|
||||
num[k] = 1;
|
||||
}
|
||||
|
||||
if (n == 0)
|
||||
break;
|
||||
|
||||
while (n > 1) { // 存活人數 > 一人
|
||||
for (int i = 1; i < 3501; i++) {
|
||||
if (p[i] % n != 0) {
|
||||
counter = p[i] % n; //如果質數相對人數很大取餘數就好
|
||||
}
|
||||
else {
|
||||
counter = n;
|
||||
}
|
||||
|
||||
// cout << "質數 " << counter << endl;
|
||||
while (counter > 0) {
|
||||
if (point == copy_n) {
|
||||
point = 0;
|
||||
}
|
||||
if (num[point + 1] == 1) {
|
||||
counter--;
|
||||
point++;
|
||||
}
|
||||
else {
|
||||
point++;
|
||||
}
|
||||
|
||||
if (counter == 0) {
|
||||
num[point] = 0; //第 point 人被殺
|
||||
n = n - 1; //總人數少 1
|
||||
// cout << "人數 " << n << endl;
|
||||
}
|
||||
}
|
||||
// cout << "被殺 " << point << endl;
|
||||
// cout <<"---------------"<< endl;
|
||||
if (n == 1)
|
||||
break;
|
||||
}
|
||||
//輸出最後倖存者
|
||||
if (n == 1) {
|
||||
for (int i = 1; i <= copy_n; i++) {
|
||||
if (num[i] == 1)
|
||||
cout << i << endl;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
cout << endl;
|
||||
}
|
Reference in New Issue
Block a user