Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

주어진 값보다 작은 AND, OR 및 XOR 연산의 최대값을 찾는 C 프로그램

<시간/>

두 개의 정수 k와 n이 주어졌다고 가정합니다. 우리의 임무는 세 가지 작업을 수행하는 것입니다. 범위 n까지의 모든 숫자 쌍 사이의 비트 AND, 비트 OR 및 비트 XOR. 주어진 값 k보다 작은 두 쌍의 숫자 사이의 세 연산 모두의 최대값을 반환합니다.

따라서 입력이 n =5, k =5와 같으면 출력은 4 3 4가 됩니다.

5보다 작은 모든 숫자 쌍 간의 AND, OR 및 XOR 연산의 가장 큰 값은 각각 4, 3, 4입니다. 이러한 연산의 값이 주어진 값 k보다 작은 것을 볼 수 있습니다. 즉, 5입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 및최대값:=0 또는 최대값 =0, xor최대값 =0
  • 값1 :=0, 값2 =0, 값3 =0
  • i:=1 초기화의 경우, i <=n일 때 업데이트(i 1만큼 증가), 수행:
    • 값1 :=i AND j
    • 값2 :=i OR j
    • 값3 :=i XOR j
    • value1> andMax 및 value1
    • andMax :=값1
  • value2> orMax 및 value2
  • 또는최대 :=값2
  • value3> xorMax 및 value3
  • xorMax :=값3
  • 인쇄(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