首页 > ACM题库 > HDU-杭电 > hdu 2143 box-数论-[解题报告]C++
2013
12-29

hdu 2143 box-数论-[解题报告]C++

box

问题描述 :

One day, winnie received a box and a letter. In the letter, there are three integers and five operations(+,-,*,/,%). If one of the three integers can be calculated by the other two integers using any operations only once.. He can open that mysterious box. Or that box will never be open.

输入:

The input contains several test cases.Each test case consists of three non-negative integers.

输出:

The input contains several test cases.Each test case consists of three non-negative integers.

样例输入:

1 2 3

样例输出:

oh,lucky!

2011-12-17 08:03:16

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2143

题意:有3个数字abc,五种操作(+-*/%),如果有一个数字能被另外两个数字用那5种操作之一一次计算出来,则输出oh,lucky!,否则输出what a pity!。此题中除法不是整除。

mark:因为减法和除法包含在加法和乘法内,所以不需要单独判断。取mod注意模数不为0。另外加法和乘法会超int界,用long long。

代码:

# include <stdio.h>

typedef long long ll ;

ll test(ll a, ll b, ll c)
{
    if (a+b == c||a+c==b||b+c==a) return 1 ;
    if (a*b ==c ||a*c == b || b*c ==a) return 1 ;
    if (a != 0)
    {
        if (b%a == c || c%a == b) return 1 ;
    }
    if (b != 0)
    {
        if (a%b == c || c%b == a) return 1 ;
    }
    if (c != 0)
    {
        if (a%c == b || b%c == a) return 1 ;
    }
    return 0 ;
}


int main ()
{
    ll a, b, c ;
    while (~scanf ("%I64d%I64d%I64d", &a, &b, &c))
        puts (test(a,b,c) ? "oh,lucky!" : "what a pity!") ;

    return 0 ;
}

解题转自:http://www.cnblogs.com/lzsz1212/archive/2012/01/06/2315222.html