首页 > 阿里笔试7.20
头像
阿帕亚
编辑于 2020-07-22 10:47
+ 关注

阿里笔试7.20

## 第一题
n 由三个互不相等的数相而得,这三个数两两的最大公约数是k,1 <= k <= n <= 10^18。
输入:T组数据,每行给定n和k。
输出:是否存在这样三个数,存在则输出任意一组答案(n = x + y +z),不存在则输出-1。

## 第二题 - 计算幸运数个数
给定一个正整数,计算相邻数之差的绝对值,最后计算得出一位数,为7则是幸运数。
例如: 219,  |2 - 1| = 1, |1 - 9| = 8,  1 和 8 组合成 18, 然后继续计算, | 1 - 8 | = 7,所以219是幸运数。
218,  |2 - 1| = 1, |1 - 8| = 7,  1 和 8 组合成 17, 然后继续计算, | 1 - 7 | = 6,所以219不是幸运数。
输入: T组数据,每行输入L 和 R   (1  <= L <= R <= 10^9)。
输出 : 计算区间内的幸运数个数。
样例输入 :
3
1 10
1 1000
1 100000
样例输出:
1
28
498

我只做出了第一题
import java.util.*;

public class Main {

    static long gcd(long a, long b) {
        return b == 0 ?  a : gcd(b, a % b);
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();
        while (t-- > 0) {
            long n = scanner.nextLong();
            long k = scanner.nextLong();
            boolean flag = false;
            if ( n % k != 0) {
                System.out.println(-1);
                continue;
            }
            long p = n / k;

            for (long x = 1; x <= p - 3 && !flag; x++) {
                for (long y = x + 1; y < p - x && !flag; y++) {
                    long z =  (p - x - y);
                    if (z != x && z != y) {
                        long temp1 = gcd(z, x);
                        if (temp1 != 1 ) continue;
                        long temp2 = gcd(z, y);
                        if (temp2 != 1 ) continue;
                        long temp3 = gcd(x, y);
                        if (temp3 != 1 ) continue;
                        System.out.println(x* k+ " " + y * k + " " + z * k);
                        flag = true;
                    }
                }
            }
            if (!flag) System.out.println(-1);
        }
        scanner.close();
    }
}

全部评论

(8) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐