You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排查HackerRank中C语言Bitwise Operators题的代码错误

HackerRank Bitwise Operators 挑战代码错误排查

这是HackerRank平台的Bitwise Operators in C编程挑战任务:给定整数n和阈值k,需找出1到n中所有满足i<j的数对,计算其按位与(&)、按位或(|)、按位异或(^)的结果,保留所有小于k的结果中的最大值,最终按AND、OR、XOR的顺序输出。

我的代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

void calculate_the_maximum(int n, int k) {
  int m1=0,m2=0,m3=0;
  for (int x=1; x<n; x++){
      for (int y=2; y<=n; y++){
          //and
          int a=x&y;
          if((a>m1) && (a<k)){
            m1=a;
          };
          //or
          int b=x|y;
          if((b>m2) && (b<k)){
            m2=b;
          };
          //xor
          int c=x^y;
          if((c>m3) && (c<k)){
            m3=c;
          };
      }
  }
  
  printf("%d\n",m1);
  printf("%d\n",m2);
  printf("%d\n",m3);
}

int main() {
    int n, k;
  
    scanf("%d %d", &n, &k);
    calculate_the_maximum(n, k);
 
    return 0;
}

测试情况:

输入为5 4时,我的输出:

3
3
3

预期输出:

2
3
3

错误原因:

你的内层循环for (int y=2; y<=n; y++)违反了题目要求的i<j(即x<y)的数对条件:

  1. 当x >= y时(比如x=3,y=2;x=2,y=2),这类数对本不该被纳入计算,但你的代码却遍历了它们。
  2. 以输入5 4为例,错误的循环会计算x=3和y=3的按位与结果为3,这个值小于k=4,因此错误地将m1更新为3,但实际上(3,3)并不满足i<j的要求。

修正方案:

将内层循环的起始值改为x+1,确保只遍历x<y的合法数对:

for (int y = x + 1; y <= n; y++)

修改后,重新运行输入5 4,就能得到符合预期的输出:2、3、3。

内容的提问来源于stack exchange,提问作者Sandeepa_Dilshan_Alagiyawanna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:06:17