Битовые операторы неверный вывод - PullRequest
0 голосов
/ 05 декабря 2018

Проблема: https://www.hackerrank.com/challenges/bitwise-operators-in-c/problem

Я пытался решить проблему, используя C, но на выходе получается

1
5
1

вместо

2
3
3

Я не могу найтиошибка в этом коде:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
//Complete the following function.


void calculate_the_maximum(int n, int k)
{

    int answer1=0;
    int answer2=0;
    int answer3=0;

      for(int i=1;i<n;i++)
      {
          for(int j=i+1; j<=n;j++)
          {
              if((i&j >=answer1) && (i&j < k))
              {
                  answer1 = (i&j);
              }

              if((i|j >=answer2) && (i|j < k))
              {
                  answer2 = (i|j);
              }

              if((i^j >=answer3) && (i^j < k))
              {
                  answer3 = (i^j);
              }
          }
      }

    printf("%d\n%d\n%d",answer1,answer2,answer3);
}


int main()
{
    int n, k;

    scanf("%d %d", &n, &k);
    calculate_the_maximum(n, k);

    return 0;
}

1 Ответ

0 голосов
/ 06 декабря 2018

Я не люблю ставить полные ответы, но так как я решил, я надеюсь, что это может помочь вам.
Я разбил его, так что будет легче понять
смотреть сокращенный, если оценка (condition) ? True_val : False_val

void calculate_the_maximum(int n, int k) {
  int max_and = 0;
  int max_or = 0;
  int max_xor = 0;
  int tOr, tAnd, tXor;
  for (int i = 1; i <= n ; i++)
    for (int j = 1; j <= n; j++) {
        if ( i <= j ) continue;
        tAnd = (i & j);
        tOr = (i | j);
        tXor = (i ^ j);

        max_and = ((tAnd > max_and) && (tAnd <k)) ? tAnd : max_and;
        max_or = ((tOr > max_or) && (tOr <k)) ? tOr : max_or;
        max_xor = ((tXor > max_xor) && (tXor < k)) ? tXor : max_xor;
    }

  printf("%d\n%d\n%d", max_and, max_or, max_xor);
}
...