当前位置: 首页> 房产> 家装 > 网站建设思路_搭建公司内部网站_seo网络优化教程_千锋教育的官网

网站建设思路_搭建公司内部网站_seo网络优化教程_千锋教育的官网

时间:2025/7/15 1:24:21来源:https://blog.csdn.net/bingw0114/article/details/144070081 浏览次数:0次
网站建设思路_搭建公司内部网站_seo网络优化教程_千锋教育的官网

描述

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

共有t组询问。

输入描述:

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

输出描述:

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

示例1

输入:

2
2 3
0 0

输出:

5 3
1 1
一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.有t组正整数

2.每组正整数包含两个正整数a和b

3.求问满足每组正整数a和b的x和y

4.x、y满足:

(1)x mod y = a

(2)y mod x = b

二、解题思路

1.x mod y = a的意思是x除以y得z余a

x / y = z

y * z + a = x

y mod x = b

y / x = w

w * x + b = y

yz + wx + a + b = x + y

a + b = x + y - yz - wx

a + b = x(1-w) + y(1-z)

a + b = x(1-y/x)+y(1-x/y)

2. 假设a是5,如果希望x%y=5

最简单的方式就是让x比y大5,且y不能等于0

比如y=1,x=6,x%y = 6%1 = 5

假设b是7,希望y%x = 7

1 % 6 = 1,如果一个较小的数对一个较大得数求余,那么会等于自身

所以我们可以让y = 7,x=7+6-1=12

这样的话x%y=12%7=5=a

y%x=7%12=7=b

3.所以我们先让y=1,然后x=a+y=a+1,这样的话x%y=a+1%1=a

然后y=1+b-1=b,然后x=a+1-1+b这样的话y%x=b%a+b=b

a+b%b=a

4.如果a为0的时候呢

x%y=0证明x等于y或者x是y得倍数

假设a为0b为1

如果y%x=1那么y=x+b=x+b或者y=b=1,x大于y,因为需要x是y的倍数,所以x刚好可以等于2

y=1,x=2

1%2=1

2%1=0

所以如果某一个a是0得时候,x是y得2倍,y则等于b,x则等于2b

但是这是b不为0得情况

5.如果b等于0呢,这样的情况a和b需要相等,但是又不能等于0,我们可以将他们设置成1

6.假设a为12

b为4

这个时候,如果按照原来的想法,a!=0,b!=0将x设置为a+b=16将y设置为b=4

会有问题,因为a+b%b得到的值不是a12而是0,为什么呢,因为a是b得倍数,

当a大于b的时候可以这样,将x设置为a,y设置为a+b

这样的话x就是4,y是16

x%y=12%16=12

y%x=16%12=4

7.如果a=b的时候呢?如果a或者b不为0的话,(就是都是0)

没有解,返回-1就可以了

三、具体步骤

使用的语言是C

#include <stdint.h>
#include <stdio.h>int main() {int t;if (scanf("%d", &t) != EOF) {for(int i = 0; i < t; i++) {int a, b;if(scanf("%d%d", &a, &b) != EOF) {int x, y;// printf("a:%d b:%d\n", a, b);if(a == 0 && b == 0) {x = 1;y = 1;} else if(a == 0) {x = 2 * b;y = b;} else if(b == 0) {y = 2 * a;x = a;} else if(a > b){x = a;y = a + b;} else if(b > a){x = a + b;y = b;} else if(a == b){x = -1;y = -1;}//printf("x mod y: %d\n", x % y);//printf("y mod x: %d\n", y % x);printf("%d %d\n", x, y);} else printf("error1\n");}} else printf("error\n");return 0;
}

关键字:网站建设思路_搭建公司内部网站_seo网络优化教程_千锋教育的官网

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: