| ||||||||||
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