构造二阶行列式
题目描述
小欧希望你构造一个二阶行列式,满足行列式中每个数均为不超过 20 的正整数,且行列式的值恰好等于x。你能帮帮她吗?
输入描述
一个正整数x。-1000 <= x <= 1000
输出描述
如果无解,请输出-1。否则输出任意合法行列式即可(输出两行,每行输出两个不超过20的正整数)。
输入示例
2
输出示例
3 2 5 4
提示信息
输出:
3 4
7 10
也是满足条件的。
思路:
这道题a、b、c、d每个数都为20以内的正整数,直接采用暴力对4个数进行遍历即可。若是想降低时间复杂度,可以按照多数之和解题的思想,遍历其中三个数剩下的一个采用二分的方法
注意二分的写法,代码为左闭右闭的二分写法
import java.lang.*; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int target = in.nextInt(); int a, b, c, d; for (a = 1; a <= 20; a++) { for (d = 20; d >=a; d--) { if(a*d<=target)continue; for (b = 1; b <= 20; b++) { int start = 1; int end = 20; while (start < end) { c = (start + end) / 2; if(a*d-b*c<=target){ end = c; }else{ start = c+1; } } if(start == end && a*d-b*start==target){ System.out.println(a+" "+b); System.out.println(start+" "+d); return; } } } } System.out.println(-1); } }