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

In cặp số có giá trị AND lớn nhất trong mảng C

Bài toán

Cho mảng n số nguyên dương, tìm cặp (a,b) cho a & b (bitwise AND) lớn nhất.

Ví dụ

arr = {4,8,12,16} → cặp (8,12), max AND = 8
arr = {4,8,16,2} → không có cặp AND > 0

Thuật toán tối ưu (bit manipulation)

  • Duyệt bit từ 31 xuống 0
  • Thử set bit này vào kết quả res
  • Đếm số phần tử có (arr[i] & pattern) == pattern
  • Nếu ≥2 phần tử → giữ bit này trong res
  • Cuối: tìm 2 phần tử thỏa mãn (arr[i] & res) == res

Mã nguồn C

#include <stdio.h>

int checkBit(int pattern, int arr[], int n) {
    int cnt=0;
    for(int i=0;i=0; bit--) {
        int cnt = checkBit(res | (1<= 2) res |= (1<

Kết quả

Pair: 8 9
Max AND = 8