链接:https://ac.nowcoder.com/acm/contest/60393/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 给出两个整数 � n 和 � m,请你找出两个整数 � a 和 � b,并且 � a 和 � b 需要同时满足以下条件: { � + � = � � mod � = � { a+b=n a mod b=m 0 ≤ � ≤ 1 0 9 , 1 ≤ � ≤ 1 0 9 0≤a≤10 9 ,1≤b≤10 9 其中, mod mod 代表计算两个数相除后的余数,例如 10 mod 3 = 1 , 4 mod 2 = 0 10 mod 3=1,4 mod 2=0。 如果找不到合法的 � a 和 � b,输出 − 1 −1;否则请输出你找到的 � a 和 � b。如果有多个可行的答案,请输出任意一个。 输入描述: 第一行包含一个整数 � ( 1 ≤ � ≤ 2 ⋅ 1 0 5 ) T(1≤T≤2⋅10 5 ),表示测试用例的组数。 对于每组测试用例: 仅输入一行,包含两个整数 � , � ( 0 ≤ � , � ≤ 1 0 9 ) n,m (0≤n,m≤10 9 )。 输出描述: 对于每组测试用例: 仅输出一行。如
时间: 2024-04-16 15:25:24 浏览: 138
根据您提供的链接,问题的描述是给定两个整数 n 和 m,要求找出两个整数 a 和 b,满足以下条件:
1. a + b = n
2. a mod b = m
如果找不到合法的 a 和 b,则输出 -1;否则,请输出任意一个满足条件的 a 和 b。
以下是一个解决该问题的示例代码:
```c
#include <stdio.h>
int main() {
int T; // 测试用例的组数
scanf("%d", &T);
while (T--) {
int n, m; // 输入的整数 n 和 m
scanf("%d %d", &n, &m);
if (n < m || (n % 2 != 0 && m == 0)) {
// 如果 n 小于 m 或者 n 是奇数且 m 是 0,无法找到合法的 a 和 b
printf("-1\n");
}
else {
int a = (n - m) / 2;
int b = n - a;
printf("%d %d\n", a, b);
}
}
return 0;
}
```
在这个示例中,我们使用了一个简单的逻辑来判断是否满足条件。首先,如果 n 小于 m 或者 n 是奇数且 m 是 0,那么无法找到合法的 a 和 b,所以输出 -1。否则,我们可以通过计算 (n - m) / 2 得到 a,并通过 n - a 得到 b,满足条件的 a 和 b。
希望这个示例对您有帮助。如果有任何疑问,请随时提问。
阅读全文