好人坏人

来源:互联网 发布:windows7服务优化说明 编辑:程序博客网 时间:2024/04/28 00:17

http://blog.csdn.net/conanswp/article/details/19922209

参考该文
k个好人,k个坏人。好人编号问1到k,坏人编号为k+1到2*k,求出步长m的最小值,使得最先出列的k个人均为坏人

给定一个m值,处决的第1到k个人的编号必须均大于k,即k+1到2*k的人均最先被处决。本题只需求出m值,因此使m从k+1开始遍历,然后根据处决人的编号判断m是否满足要求,若满足,则继续处决,直至处决k个人后,将m值输出,否则使m+=1,重新检验。

#include<cstdio>int getMinimumM(int K) {        int total = 2 * K, remainder = total, start = 1, next, hit = 0;        int ans = K + 1;         while (1)         {            next = start + ans - 1;             next %= remainder;             if (next > K || next == 0)             {                hit++;                if (hit == K)                 {                    return ans;                }                remainder--;                 if (next == 0)                 {                    start = 1;                 }                 else                 {                    start = next;                 }            } else {                remainder = total;                start = 1;                hit = 0;                ans++;            }        }    }int main(){    int n;    scanf("%d",&n);    printf("%d",getMinimumM(n));}
0 0
原创粉丝点击