| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
???In Reply To:我的理解,感觉不是很严密,不过AC了,大家看看是不是可以这样理解啊 Posted by:absolute at 2009-03-28 22:51:40 > 题目意思大概是:
> p+23*integer=e+28*integer=i+33*integer=x+d,
> 求出x。
> 我的思路是,既然每个等式都等于x+d,那么我每个等式来一次就可以了。然后将三个等式的结果相加即可。
>
> p+23*interger = x+d = rp; rp初始等于28*33,然后每次rp递增28*33,直到rp%23=p,得到rp,同样道理re每次递增23*33,ri每次递增23*28,得到re,ri,最后x=(rp+re+ri-d)%21252;
>
> 完整程序如下:
> int p,e,i,d;
> int mp,me,mi;
> mp = 28*33;
> me = 23*33;
> mi = 23*28;
> scanf("%d %d %d %d",&p,&e,&i,&d);
> int n=1;
> while(p!=-1||e!=-1||i!=-1||d!=-1)
> {
> int rp,re,ri;
> rp = mp;
> re = me;
> ri = mi;
> p %= 23;
> e %= 28;
> i %= 33;
> while(rp%23!=p)
> {
> rp += mp;
> }
> while(re%28!=e)
> {
> re += me;
> }
> while(ri%33!=i)
> {
> ri += mi;
> }
> int x;
> x= (rp+re+ri-d)%21252;
> if(x==0)
> x=21252;
> printf("Case %d: the next triple peak occurs in %d days.\n",n,x);
> n++;
> scanf("%d %d %d %d",&p,&e,&i,&d);
> }
>
可以通过吗?
我的程序代码如下:
#include<stdio.h>
int Calcu(int pp,int ee,int ii,int dd);
int main(void)
{
int p,e,i,d;
int y=1;
scanf("%d %d %d %d",&p,&e,&i,&d);
while(p!=-1&&e!=-1&&i!=-1&&d!=-1)
{
printf("Case %d: the next triple peak occurs in %d days.\n",y++,Calcu(p,e,i,d));
scanf("%d %d %d %d",&p,&e,&i,&d);
}
return 0;
}
int Calcu(int pp,int ee,int ii,int dd)
{
int x=pp+23;
while(!(x>ee&&x>ii&&(x-ee)%28==0&&(x-ii)%33==0))
{
x+=23;
}
while(x<=dd)
{
x+=21252;
}
return x-dd;
}
可是,wa...
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator