Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Chương trình C tìm giá trị lớn nhất của phép AND, OR, XOR nhỏ hơn giá trị cho trước

Giả sử chúng ta được cho hai số nguyên k và n. Nhiệm vụ là thực hiện ba phép toán bitwise: AND, OR và XOR giữa tất cả các cặp số trong phạm vi n. Chúng ta trả về giá trị lớn nhất của cả ba phép toán giữa bất kỳ hai cặp số nào mà nhỏ hơn giá trị cho trước k.

Ví dụ, nếu đầu vào là n = 5, k = 5, thì đầu ra sẽ là 4 3 4.

Giá trị lớn nhất của các phép AND, OR và XOR giữa tất cả các cặp số mà nhỏ hơn 5 lần lượt là 4, 3 và 4. Ta thấy các giá trị này đều nhỏ hơn giá trị k cho trước là 5.

Giải thuật

  • Khởi tạo andMax = 0, orMax = 0, xorMax = 0
  • Duyệt qua tất cả các cặp (i, j) với 1 ≤ i < j ≤ n
  • Tính value1 = i & j, value2 = i | j, value3 = i ^ j
  • Cập nhật andMax nếu value1 > andMax và value1 < k
  • Cập nhật orMax nếu value2 > orMax và value2 < k
  • Cập nhật xorMax nếu value3 > xorMax và value3 < k
  • In ra andMax, orMax, xorMax

Ví dụ minh họa

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

void solve(int n, int k) {
    int andMax = 0, orMax = 0, xorMax = 0;
    int value1 = 0, value2 = 0, value3 = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = i + 1; j <= n; j++) {
            value1 = i & j;
            value2 = i | j;
            value3 = i ^ j;
            if (value1 > andMax && value1 < k) andMax = value1;
            if (value2 > orMax && value2 < k) orMax = value2;
            if (value3 > xorMax && value3 < k) xorMax = value3;
        }
    }
    printf("%d %d %d ", andMax, orMax, xorMax);
}

int main() {
    solve(5, 5);
    return 0;
}

Đầu vào

5, 5

Đầu ra

4 3 4