用C语言解决下面的这个问题a+b=n,a%b=m,给定你n和m,请你构造一组a,b的解满足上面两个式子,如果构造不出来请输出-1,构造出最小的一组解,a越小这组解越小
时间: 2024-03-25 17:41:07 浏览: 204
吉林大学珠海学院-C语言试卷A卷.doc
这道题可以使用数学方法来解决。首先,我们可以将 a+b=n 和 a%b=m 联立起来,得到:
a = n-b
将 a 带入 a%b=m 中,得到:
n-b = kb + m
移项可得:
(n-m) = (k+1)b
因为我们要求最小的一组解,所以 k+1 值最小,也就是 b 值最小。因此,我们可以从 m 开始,依次枚举 b 的值,计算出对应的 k 和 a 的值,判断是否符合要求即可。
以下是 C 语言的代码实现:
```c
#include <stdio.h>
int main()
{
int n, m;
scanf("%d %d", &n, &m);
int b = m;
while (b <= n)
{
int k = (n-m) / b;
int a = n - b;
if ((n-m) % b == 0 && a >= 0)
{
printf("%d %d\n", a, b);
return 0;
}
b++;
}
printf("-1\n");
return 0;
}
```
输入格式为两个整数,分别为 n 和 m。输出格式为一行,如果有解则输出对应的 a 和 b,如果无解则输出 -1。
阅读全文