## 第一题
n 由三个互不相等的数相而得,这三个数两两的最大公约数是k,1 <= k <= n <= 10^18。
输入:T组数据,每行给定n和k。
输入: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) 回帖