我的北大ACM POJ1006解答

我的北大ACM POJ1006解答
题目意思大概是:

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);

	}

你可能感兴趣的:(ACM)