UVA 10673 Play with Floor and Ceil

UVA_10673

    这个题目可以用拓展欧几里得算法求一组整数解,但实际上也可以直接去构造。

    我们知道向上取整和向下取整之差只能为0或1,如果为1,我们显然可以找到p=x,q=-x为符合要求的一组解,如果为0,那么只要(p+q)[x/k]=x,同时注意到在这种情况下x%k==0,所以令p+q=k即可,如果想让p、q有整数解,最简单的办法就是p=0,q=k。

#include<stdio.h>
#include<string.h>
int main()
{
int a, b, p, q, x, k, t;
scanf("%d", &t);
while(t --)
{
scanf("%d%d", &x, &k);
a = x / k;
b = x / k + (x % k ? 1 : 0);
if(a != b)
p = -x, q = x;
else
p = 0, q = k;
printf("%d %d\n", p, q);
}
return 0;
}


你可能感兴趣的:(with)