| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
打表的一种解法:In Reply To:题中例子,取下个生成过程 Posted by:20061463 at 2014-03-02 21:04:26 > #include <iostream>
> #include <vector>
> using namespace std;
>
> void printGuys(vector<int> guys) {
> int i = 0, size = guys.size();
> for (i = 0; i < size; ++i) {
> printf("i:%d guy:%d\t", i, guys[i]);
> }
> printf("\n");
> }
>
> void test() {
> vector<int> guys(6, 0);
> int n = 6, m = 5;
>
> int i = 0, next = 0, size = n;
> for (i = 0; i < n; ++i) {
> guys[i] = i + 1;
> }
> while (guys.size() > 1) {
> size = guys.size();
> next = (next + m - 1) % size;
> printf("\n next:%d\t guy:%d size:%d\n", next, guys[next], size);
> printGuys(guys);
> for (i = next; i < size - 1; i++) {
> guys[i] = guys[i + 1];
> }
> guys.pop_back();
> }
> printGuys(guys);
> }
>
> int main(void) {
> test();
> // freopen("input.txt", "r", stdin);
> return 0;
> }
打表的一种解法:
#include <stdio.h>
int main_0(void) {
freopen("input.txt", "r", stdin);
int result[14] = { 0 };
int k = 0;
while (scanf("%d", &k) && k) {
if (result[k] > k) { // have result
printf("%d\n", result[k]);
continue;
}
int miniM = k;
while (true) {
int n = k * 2; // n = 2*k;
int next = 0, killed = 0;
// kill first k guys.
for (killed = 0; killed < k; ++killed) {
next = (next + miniM - 1) % n;
if (next < k) {
break;
}
--n;
}
if (killed == k) {
break;
}
++miniM;
}
result[k] = miniM;
// printf("k:%d m:%d\n", k, miniM);
printf("%d\n", miniM);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator