题解:UVA10257 Dick and Jane

· · 题解

题目描述应该是能读懂的。

信息整合:

问:三只宠物现在分别多少岁?

代码思路:

先求出 A,再列方程计算现在距离 Turtle 出生过去了的年数 K,并得出 3 只宠物的年龄。

但是,K 不一定正好被 3 整除,还需分情况讨论:

  1. K \bmod 3 = 2 时,同时给 Spot 和 Puff 都 +1 岁(因为出生月份或日期的不同,可能会导致在某一时刻两只宠物之间年龄差的微变)。这种情况说明 Turtle 的月份小于 Spot 的,也小于 Puff 的月份(数字越大,月份越小)。

  2. K \bmod 3 = 1 时,要为 Spot Puff 的年龄 +1。因为 y 一定是 \ge s + p 的,所以只有在 [y=s+p]=1 时才将 Spot 的年龄增加 1,其余的时候将 Puff 的年龄 +1

CODE:

#include<bits/stdc++.h>
using namespace std;
int s,p,y,j;
int main(){
    //可自行添加快读等。
    while(cin>>s>>p>>y>>j){//循环输入。
        int d=12;
        int k=(d+j-p-y)/3;//解方程……
        int S=k+y,P=k+p,Y=k;//把3只宠物年龄列出来。
        if(S+P+Y+2==d+j){//k%3==2时。
            S+=1,P+=1;
        }else if(S+P+Y+1==d+j){//k%3==1时。
            if(y==s+p)S+=1;
            else P+=1;//y>s+p
        }
        cout<<S<<" "<<P<<" "<<Y<<"\n";//记得换行。
    }
    return 0;//好习惯。
}