hdu 1443

来源:互联网 发布:左右脑平衡 知乎 编辑:程序博客网 时间:2024/06/16 00:55

题目大意:输入一个整数k表示好人的数量.然后一个圈有2k个人组成。前k个是好人,后k个是坏人。请确定合适的步数,使得在杀掉第一个好人之前,把所有的坏人都杀掉


解题思路:约瑟夫环问题


代码如下:

/* * 1443_1.cpp * *  Created on: 2013年8月11日 *      Author: Administrator */#include <iostream>using namespace std;//res[]用来存储1~14个好人是应该走的步数int res[16];int fun(int n) {int ans, sum;sum = n * 2;if (res[n]) {return res[n];} else {for (ans = n + 1;; ans++) {//每一个可能的值都需要sum和flag来标记bool flag = 0;sum = n * 2;int j;for (j = ans;; j += ans - 1) { //人数减1if (j > sum) {j = j % sum ? j % sum : sum;}if (j <= n) {break;} else {--sum; //人数减1}if (sum == n) {flag = 1;break;}}if (flag) {res[n] = ans;return res[n];}}}}int main() {int k;while (scanf("%d", &k), k) {//printf("%d\n",fun(k));cout << fun(k) << endl;}}




原创粉丝点击