生理周期_POJ

2017‎年‎2‎月‎16‎日,‏‎10:49:20

郭炜教授代码 解题思路:先找到一个体力高分的日子(第一个for循环)(当然,其他高分也可以)
然后再找到一个情商高分的日子,在此期间有很多天 是可以避开的,因为要保证,结果是三个数的最大公倍数 所以 第二个for循环,每次间隔
一个体力高分的周期 去做尝试 ,这样就能确保,结果一定是体力高分倍数 直到找到一个即是 体力高分又是情商高分的日子,接下来的尝试
只需试那些 即是体力又是情商高分的日子! 所以第二个for循环 的间隔:k+=23*28 情商高分与体力高分的
最小公倍数!直到找到结果!

代码如下:

 #include <stdio.h>
int main(){
    int p,e,i,d,k,caseNO=0;
    while(scanf("%d %d %d %d",&p,&e,&i,&d) && p!=-1){
        for(k=d+1;(k-p)%23;++k);//第一个循环结果:k一定是在 d 之后,p 之后的 23的最小倍数 与 d之和 

        for(;(k-e)%28;k+=23);  // 第二个循环结果:k一定是在 e与p 之后的 2823 的最小倍数
                        // 注意:每次循环 k+=23,这能确保,在循环的同时,k也是23的倍数,很精髓

        for(;(k-i)%33;k+=23*28);//第三个循环结果:k一定是在 e与p与i 之后的 282333 的最小倍数 
                        // 注意:每次循环 k+=23*28,这样能确保,每次循环都能遵守上面两次循环的规则 

        printf("Case %d:the next triple peak occurs in %d days.\n",++caseNO,k-d);
    }
    return 0;
} 
/*自己代码 ,感觉自己 真的弱鸡,真心弱。 
#include <stdio.h>
int main(){
    int a,b,c,d,i,t=0;
    while(scanf("%d %d %d %d",&a,&b,&c,&d) && p!=-1){
        for(i=d+1;i<=21252;++i)
            if((i-a)%23==0 && (i-b)%28==0 && (i-c)%33==0)
                printf("Case %d:the next triple peak occurs in %d days.\n",++t,i-d);
    }
    return 0;
}*/ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值