解题思路

这是一道线性方程组求解问题。已知:

  1. 四个值
  2. 需要求解 三个未知数
  3. 所有数字在 之间
  4. 要求解必须是整数

解题步骤:

  1. 设已知的四个值分别为:
  2. 可以得到:
  3. 验证解是否满足条件:
    • 所有值必须是整数
    • 所有值必须在 之间
    • 的两种计算方式必须相等

代码

#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")

算法及复杂度

  • 算法:直接求解线性方程组。
  • 时间复杂度:,只需要固定的计算步骤。
  • 空间复杂度:,只需要常数个变量。