小红拿到了两个整数a和b。

小红拿到了两个整数a和b。她希望你构造两个正整数x和y满足:1、x mod y =a 2.y mod x=b 其中p mod q代表p除以q得到的余数。

输入描述:

第一行输人一个正整数t,代表询问的次数。
接下来的t行,每行输入两个整数a和b,代表一次询问。
1 < t<10000
0 < a,b ≤ 10^9

输出描述:

输出t行,每行输出两个正整数(不能大于2^31-1)。
有多解时输出任意即可。
如果无解,请输出"-1-1"即可。

示例

输入:
2
2  3
0  0
输出:
5  3
1  1

根据上述的要求,我们得输出输入多次输入输出所以我们得:

//伪代码:
int n;
cin >> n;
while(n--)
{
    
}

再根据题目中所说的:

x mod y = a

y mod x = b

我们可以写出如下代码:

//伪代码:
int a = 0, b = 0, x = 0, y = 0;
cin >> a >> b;
if (a > b)
{
    x = a, y = a + b;
}
else
{
    x = a + b, y = b;
}
if (x % y == a && y % x == b)
{
    cout << x << " " << y << endl;
}
else if (a == 0 || b == 0)
{
    cout << "-1 -1" << endl;
}
else
{
    if ((x % y == a && y % x == b))
    {
        cout << x << " " << y << endl;
    }
    else
    {
        cout << "-1 -1" << endl;
    }
}

上述代码我们发现将例子中a = 0  b = 0输入之后,发现报错,原因是除数变成了0,导致程序报错,我们单独写一个判断0这种情况的if语句:
有且仅有这一种特殊情况,其他的例如输入a = 0 b = 1或a = 1  b = 0这种的都是直接返回-1

if (a == 0 && b == 0)
{
    x = 1;
    y = 1;
    cout << x << " " << y << endl;
}

将上述代码整合:

void A()
{
     int n = 0;
     cin >> n;
    int a = 0, b = 0, x = 0, y = 0;
    while(n--)
    {
        cin >> a >> b;  //2  3
        if (a > b)
        {

            x = a, y = a + b;
        }
        else
        {
            x = a + b, y = b;

            //x = 2   y = 3
        }
        if (a == 0 && b == 0)
        {
            x = 1;
            y = 1;
            cout << x << " " << y << endl;
        }
        else if (a == 0 || b == 0)
        {
            cout << "-1 -1" << endl;
        }
        else  
        {
            if ((x % y == a && y % x == b))
            {
                cout << x << " " << y << endl;
            }
            else
            {
                cout << "-1 -1" << endl;
            }
        }
    }
}

现在看来确实蛮简单的,当时没写出来属实是我太菜了!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值