解题思路
这是一道线性方程组求解问题。已知:
四个值
- 需要求解
三个未知数
- 所有数字在
到
之间
- 要求解必须是整数
解题步骤:
- 设已知的四个值分别为:
- 可以得到:
- 验证解是否满足条件:
- 所有值必须是整数
- 所有值必须在
到
之间
的两种计算方式必须相等
代码
#include <iostream>
using namespace std;
int main() {
int x1, x2, x3, x4;
cin >> x1 >> x2 >> x3 >> x4;
// 计算A、B、C
int A = (x1 + x3) / 2;
int B1 = (x3 - x1) / 2;
int B2 = (x2 + x4) / 2;
int C = (x4 - x2) / 2;
// 验证条件
if (B1 == B2 && // B的两种计算方式相等
(x1 + x3) % 2 == 0 && // 确保A是整数
(x4 - x2) % 2 == 0 && // 确保C是整数
A >= -30 && A <= 30 && // 范围检查
B1 >= -30 && B1 <= 30 &&
C >= -30 && C <= 30) {
cout << A << " " << B1 << " " << C << endl;
} else {
cout << "No" << endl;
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x1 = sc.nextInt();
int x2 = sc.nextInt();
int x3 = sc.nextInt();
int x4 = sc.nextInt();
// 计算A、B、C
int A = (x1 + x3) / 2;
int B1 = (x3 - x1) / 2;
int B2 = (x2 + x4) / 2;
int C = (x4 - x2) / 2;
// 验证条件
if (B1 == B2 && // B的两种计算方式相等
(x1 + x3) % 2 == 0 && // 确保A是整数
(x4 - x2) % 2 == 0 && // 确保C是整数
A >= -30 && A <= 30 && // 范围检查
B1 >= -30 && B1 <= 30 &&
C >= -30 && C <= 30) {
System.out.println(A + " " + B1 + " " + C);
} else {
System.out.println("No");
}
}
}
x1, x2, x3, x4 = map(int, input().split())
# 计算A、B、C
A = (x1 + x3) // 2
B1 = (x3 - x1) // 2
B2 = (x2 + x4) // 2
C = (x4 - x2) // 2
# 验证条件
if (B1 == B2 and # B的两种计算方式相等
(x1 + x3) % 2 == 0 and # 确保A是整数
(x4 - x2) % 2 == 0 and # 确保C是整数
-30 <= A <= 30 and # 范围检查
-30 <= B1 <= 30 and
-30 <= C <= 30):
print(f"{A} {B1} {C}")
else:
print("No")
算法及复杂度
- 算法:直接求解线性方程组。
- 时间复杂度:
,只需要固定的计算步骤。
- 空间复杂度:
,只需要常数个变量。