POJ_1006_Biorhythms_生理周期_四种方法



http://poj.org/problem?id=1006


总结一下:
    首先:文件的输入输出需要练习;C语言的功底要加强;
    其次:关于break的用法很神奇,值得探索,跳出当前的循环,注意是当前的;
    最后:即使你AC了一道题目以后,还需要去优化;以提高自己的能力;
                              最后一种方法很巧妙;是值得思考的;娶个名字吧:就叫做:"抛光指路法“吧;
方法一:(文件)

//poj1006

#include "stdio.h"
#include<fstream>
using namespace std;
ifstream f("a1.txt");
int main()
{
    int p,e,i,d,count=1,k;
     while(f>>p>>e>>i>>d)//scanf("%d%d%d%d",&p,&e,&i,&d)&&p+i+e+d!=-4)
       {
           if(p==e==i==d==-1)  {break;}
           else
           {
               for(k=d+1;k<=21252+d;k++)
               if((k-p)%23==0&&(k-e)%28==0&&(k-i)%33==0)
                        printf("Case %d: the next triple peak occurs in %d days.\n",count,k-d);
            count++;
            }
       }
   return (0);
}



方法二:(标准)
#include "stdio.h"
int main()
{
int p,e,i,d,count=1,k;
while(scanf("%d%d%d%d",&p,&e,&i,&d)&&p+i+e+d!=-4)
{
for(k=d+1;k<=21252+d;k++)
if((k-p)%23==0&&(k-e)%28==0&&(k-i)%33==0)
printf("Case %d: the next triple peak occurs in %d days.\n",count,k-d);
count++;
}
return (0);
}




方法三:(标准)——优化
#include<stdio.h>
int main()
{
int p,e,i,d,cas=1,k;
while(scanf("%d%d%d%d",&p,&e,&i,&d),p+e+i+d!=-4)
{
for(k=i%33; ;k+=33)
{
if((k-p)%23==0 && (k-e)%28==0 && k>d)
break;
}
printf(
"Case %d: the next triple peak occurs in %d days.\n",cas++,k-d);
}
return 0;
}




方法四:(标准)——最优化

   可以做的进一步改进是从d+1开始逐一枚举寻找满足条件2)的数字a,
从a开始每步加23寻找满足条件2)3)的数字b,
从b开始每步加23*28寻找满足条件2)3)4)的数字x。
x就是我们要找的数字,输出时输出x-d。



#include <stdio.h>

int main()
{
int p,e,i,d,k,count=0;
scanf("%d%d%d%d",&p,&e,&i,&d);
while(p!=-1&&e!=-1&&i!=-1&&d!=-1)
{
for(k=d+1;k<21252+d;k++) if((k-p)%23==0) break;
for(;k<21252+d;k+=23) if((k-e)%28==0) break;
for(;k<21252+d;k+=23*28) if((k-i)%33==0) break;
printf("Case %d:the next triple peak occurs in %d days.\n",count,k-d);
scanf("%d%d%d%d",&p,&e,&i,&d);
count++;
}
return (0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值