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

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


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

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

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

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • andMax :=0, orMax =0, xorMax =0
  • value1 :=0, value2 =0, value3 =0
  • สำหรับการเริ่มต้น i :=1 เมื่อฉัน <=n อัปเดต (เพิ่ม i ขึ้น 1) ทำ:
    • value1 :=i AND j
    • value2 :=i หรือ j
    • value3 :=i XOR j
    • ถ้า value1> andMax และ value1
    • และแม็กซ์ :=value1
  • ถ้า value2> orMax และ value2
  • orMax :=value2
  • ถ้า value3> xorMax และ value3
  • xorMax :=value3
  • print(andMax, orMax, xorMax)
  • ตัวอย่าง

    ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

    #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;
    }

    อินพุต

    5, 5

    ผลลัพธ์

    4 3 4