查詢小於給定值的最大與、或、異或運算結果的C程式


假設我們有兩個整數k和n。我們的任務是執行三個操作:對小於n範圍內的所有數字對進行按位與、按位或和按位異或運算。我們返回所有三個操作在任意兩個數字對之間的最大值,該值小於給定值k。

因此,如果輸入類似於n = 5,k = 5,則輸出將為4 3 4。

所有數字對之間按位與、按位或和按位異或運算的最大值小於5分別為4、3和4。我們可以看到這些運算的結果都小於給定值k(即5)。

為了解決這個問題,我們將遵循以下步驟:

  • andMax := 0, orMax = 0, xorMax = 0
  • value1 := 0, value2 = 0, value3 = 0
  • for 初始化 i := 1, 當 i <= n, 更新 (i 增加 1), 執行:
    • value1 := i AND j
    • value2 := i OR j
    • value3 := i XOR j
    • 如果 value1 > andMax 且 value1 < k,則:
      • andMax := value1
    • 如果 value2 > orMax 且 value2 < k,則:
      • orMax := value2
    • 如果 value3 > xorMax 且 value3 < k,則:
      • xorMax := value3
  • 列印(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

更新於:2021年10月11日

1K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.