XidianOJ 1040 简单的游戏

题目描述

一年一度的ACM校赛又到了,在这个阳光明媚的日子里,两个小朋友在玩一个无聊而又简单的游戏:猜数字。

小朋友Cyin从1~100000里面挑选了三个数字A,B,C(他们可能相同),然后把A+B,A+C,B+C这三个值告诉小朋友Boat,你只需要写一个程序帮助小朋友Boat去计算A,B,C分别是多少,如果无解,则输出“Impossible”。

输入

有多组输入数据。

输入数据的第一行为一个数字T,代表有T组输入数据 (0<T≤20)。

接下来为T组数据,每组数据占一行,为三个整数,分别表示A+B,A+C,B+C的值。

输出

一共T行。

对于每组数据,在一行上输出三个整数或者“Impossible”,表示计算出的A、B、C或者无解。(记得要在每组答案后面换行哦!以后的每道题也一样)

--正文

签到题

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

bool impos(int i){
    if (i < 1 || i > 100000)
        return true;
    return false; 
}
bool imposSum(int sum){
    if (sum < 2 || sum > 200000){
        return true;
    }
    return false;
} 

int main(){
    int time,T;
    scanf("%d",&T);
    for (time=1;time<=T;time++){
        int sum1,sum2,sum3;
        int a,b,c;
        scanf("%d %d %d",&sum1,&sum2,&sum3);
        if (imposSum(sum1) || imposSum(sum2) || imposSum(sum3)){
            printf("Impossible
");
            continue;    
        }
        
        b = (sum1 - sum2 + sum3) / 2;
        if ((sum1 - sum2 + sum3) % 2 != 0){
            printf("Impossible
");
            continue;
        } 
        c = sum3 - b;
        a = sum1 - b;
        if ( impos(a) || impos(b) || impos(c)) {
            printf("Impossible
");
            continue;
        }
        if ((a + c) != sum2) {
            printf("Impossible
");
            continue;
        }   
        else {
            printf("%d %d %d
",a,b,c);
            continue;
        }
    }
    return 0;
}
 
原文地址:https://www.cnblogs.com/ToTOrz/p/6077144.html