【算法练习】两个偶数

简介: 1.题目描述小洛找了2个偶数x,y,想请你找一个数n,使得n % x = y % n

1.题目描述

小洛找了2个偶数x,y,想请你找一个数n,使得n % x = y % n。

输入

第一行一个整数t(1<=t<=10^5)

然后一共t行,每行包含两个数x和y,(2<=x,y<=10^9)

输出

对于每一个测试案例,输出一个数n,(1<=n<=2*10^8)满足以上要求,如果有多个数,任意输出一个即可。

输入样例

4

4 8

4 2

420 420

69420 42068

输出样例

4

10

420

9969128

提示

4%4 = 8%4

10%4 = 2 %10

420 % 420 = 420 % 420


2.问题分析

分情况讨论:


x > y:此时容易想到(x+y)% x = y = y % (x+y),即n = x + y;

x <= y : 不妨将x看的足够小,此时n%x即相当于n比若干个x多余的部分;同理,y%n即为y比若干个n多余的部分,抽象化成下图所示的数轴中,我们很容易得到,n = y - y % x / 2。



3.实现代码

import java.util.Scanner;
public class test01 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt(); // 记录输入次数
        long[] result = new long[N];
        while (N != 0){
            int x = in.nextInt();
            int y = in.nextInt();
            if(x > y){
                // 当x>y时,(x+y)%x = y = y%(x+y)
                //System.out.println(x+y);
                result[N-1] = x+y;
            }else{
                // 当x<=y时,可以把x看的足够小,n%x则表示n比若干个x多余的部分,y%n则表示y比若干个n多余的部分
                //System.out.println(y-y%x/2);
                result[N-1] = y-y%x/2;
            }
            N--;
        }
        //打印结果
        for (int i = result.length-1; i >= 0; i--) {
            System.out.println(result[i]);
        }
        in.close();
    }
}


4.实现结果


5.结果验证

5.1 验证代码

public class test02 {
    public static void main(String[] args) {
        System.out.println(42068%111488);
        System.out.println(111488%69420);
        System.out.println(6%4);
        System.out.println(2%6);
    }
}

5.2 测试结果

从如下测试结果中可以看到,实验结果符合题意。


相关文章
|
1月前
|
存储 算法 索引
模拟算法题练习(二)(DNA序列修正、无尽的石头)
模拟算法题练习(二)(DNA序列修正、无尽的石头)
|
1月前
|
并行计算 算法 测试技术
模拟算法题练习(一)(扫雷,灌溉,回文日期)
模拟算法题练习(一)(扫雷,灌溉,回文日期)
|
10月前
|
算法
算法练习Day55|● 392.判断子序列 ● 115.不同的子序列
算法练习Day55|● 392.判断子序列 ● 115.不同的子序列
|
1月前
|
算法 图形学
【头歌 计算机图形学 练习】多边形填充v1.0 (第1关:扫描线填充算法(活动边表AET法) 第2关:边缘填充法 第3关:区域四连通种子填充算法 第4关:区域扫描线种子填充算法)
【头歌 计算机图形学 练习】多边形填充v1.0 (第1关:扫描线填充算法(活动边表AET法) 第2关:边缘填充法 第3关:区域四连通种子填充算法 第4关:区域扫描线种子填充算法)
249 0
|
11月前
|
算法 前端开发
算法练习--深拷贝与浅拷贝
深拷贝与浅拷贝
61 0
|
1月前
|
存储 算法 搜索推荐
Leetcode算法题练习(一)
Leetcode算法题练习(一)
62 0
|
9月前
|
算法 Java
Java之包装类的算法小题的练习
Java之包装类的算法小题的练习
54 0
|
10月前
|
算法
算法练习Day56|583. 两个字符串的删除操作 ● 72. 编辑距离
算法练习Day56|583. 两个字符串的删除操作 ● 72. 编辑距离

热门文章

最新文章