asp系统网站怎么做优化,网站建设 开票,东莞seo网站优化排名,百度搜索结果优化网址如下#xff1a;
OpenJudge - 1012:Joseph 其中一个解法
只想到了一个快速找到下一位处决的人的方法#xff0c;本质上还是遍历#xff0c;暂时没想到更优的方法了
代码如下#xff1a;
#includecstdio
int k;bool judge(int tt, int m, int r){if(tt k) …网址如下
OpenJudge - 1012:Joseph 其中一个解法
只想到了一个快速找到下一位处决的人的方法本质上还是遍历暂时没想到更优的方法了
代码如下
#includecstdio
int k;bool judge(int tt, int m, int r){if(tt k) return true;int num (m - r) % tt; num num ? num : tt;if(num k) return false;return judge(tt - 1, m, tt - num);
}int main(void)
{while(scanf(%d, k) k){for(int m 1; ; m)if(judge(k * 2, m, 0)){printf(%d\n, m); break;}}return 0;
} 快速找到下一个处决的人的方法
从我的代码可以看出来用了一个递归函数进行判断该m行不行因为k小于13所以递归层数最多到14个不用担心栈堆段内存爆炸
先说说各个变量代表的意义
tt剩下的总人数
m和题目的m一样
r在上次处决之后处决的人的后面的坏人数到第一个好人出现为止
num这次要处决的编号
简单来说就是保持队列的第一个是编号为1的好人这样就可以直接取余得出要处决的人的编号只需注意一下刚好整除的情况就行了