o-p-p-o2023提前批0715-第一题 构造二阶行列式

小欧希望你构造一个二阶行列式,满足行列式中每个数均为不超过20的正整数,且行列式的值恰好等于x。你能帮帮她吗?

提示:二阶行列式的计算方式:
$$
\begin{vmatrix}
a & b \
c & d
\end{vmatrix} = a * d - b * c
$$
输入描述

一个正整数x。-1000<=x<=1000

输出描述

如果无解,请输出-1。否则输出任意合法行列式即可(输出两行,每行输出两个不超过20的正整数)。


示例:

1
2
3
4
5
6
输入:
2

输出:
3 2
5 4


分析:

难度:容易

1
由于结果要求每个数不超过20,因此直接使用四重循环暴力枚举,时间复杂度为20 * 20 * 20 * 20

代码

  • C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>

using namespace std;

int main() {
int x;
cin >> x;

for (int a = 1; a <= 20; a ++)
for (int b = 1; b <= 20; b ++)
for (int c = 1; c <= 20; c ++)
for (int d = 1; d <= 20; d ++) {
if (a * d - b * c == x) {
cout << a << " " << b << endl;
cout << c << " " << d << endl;
return 0;
}
}

cout << -1 << endl;
return 0;
}
  • java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);

int x = in.nextInt();

for (int a = 1; a <= 20; a ++)
for (int b = 1; b <= 20; b ++)
for (int c = 1; c <= 20; c ++)
for (int d = 1; d <= 20; d ++) {
if (a * d - b * c == x) {
System.out.println(a + " " + b);
System.out.println(c + " " + d);
return ;
}
}

System.out.println(-1);
}
}
  • Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
x = int(input())

def main():
for a in range(1, 21):
for b in range(1, 21):
for c in range(1, 21):
for d in range(1, 21):
if a * d - b * c == x:
print(str(a) + " " + str(b))
print(str(c) + " " + str(d))
return
print(-1)

main()
  • Golang
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
"fmt"
)

func main() {
var x int
fmt.Scan(&x)

for a := 1; a <= 20; a++ {
for b := 1; b <= 20; b++ {
for c := 1; c <= 20; c++ {
for d := 1; d <= 20; d++ {
if a*d-b*c == x {
fmt.Println(a, b)
fmt.Println(c, d)
return
}
}
}
}
}

fmt.Println(-1)
}
0%