Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C หาค่าสูงสุดของ AND, OR และ XOR ที่น้อยกว่าค่าที่กำหนด


คำอธิบายปัญหา

สมมติว่าเราได้รับจำนวนเต็มสองจำนวนคือ k และ n งานของเราคือการทำการดำเนินการ 3 แบบ ได้แก่ บิตเวิร์ส AND, บิตเวิร์ส OR และบิตเวิร์ส XOR ระหว่างคู่ของตัวเลขทั้งหมดที่อยู่ในช่วง 1 ถึง n จากนั้นคืนค่าสูงสุดของทั้งสามการดำเนินการที่มีค่าน้อยกว่า k

ตัวอย่าง

หากอินพุตเป็น n = 5, k = 5 ผลลัพธ์ที่ได้จะเป็น 4 3 4

ค่าสูงสุดของการดำเนินการ AND, OR และ XOR ระหว่างคู่ของตัวเลขที่น้อยกว่า 5 คือ 4, 3 และ 4 ตามลำดับ ซึ่งทั้งหมดน้อยกว่าค่า k ที่กำหนดไว้ (5)

ขั้นตอนการแก้ปัญหา

  1. กำหนดค่าเริ่มต้น: andMax = 0, orMax = 0, xorMax = 0
  2. ใช้ลูปซ้อน (nested loop) วนลูป i จาก 1 ถึง n และ j จาก i+1 ถึง n
  3. คำนวณค่าการดำเนินการบิตเวิร์ส:
    • value1 = i & j (AND)
    • value2 = i | j (OR)
    • value3 = i ^ j (XOR)
  4. อัปเดตค่าสูงสุดถ้าผลลัพธ์มากกว่าค่าปัจจุบันและน้อยกว่า k
  5. แสดงผลลัพธ์ andMax, orMax, xorMax

โค้ดตัวอย่าง

#include <stdio.h>

void solve(int n, int k) {
    int andMax = 0, orMax = 0, xorMax = 0;
    int value1, value2, value3;
    
    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;
}

อินพุต

5, 5

เอาต์พุต

4 3 4