小红拿到了两个整数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;
}
}
}
}
现在看来确实蛮简单的,当时没写出来属实是我太菜了!