c - 仅具有位运算符的 C 程序可在调试语句中正确运行
问题描述
我正在尝试解决这个挑战:
任务: 给定集合 S = {1, 2, 3, ...n},求:
- a & b的最大值,小于给定整数k,其中 a和b是集合s中的两个整数。
- a的最大值| b,它小于给定整数k,其中 a和b是集合s中的两个整数。
- a ^ b的最大值,小于给定整数k,其中 a和b是集合s中的两个整数。
输入格式:唯一的一行包含 2 个空格分隔的整数,分别为n和k。
我编写了这个 C 程序来尝试解决它。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void calculate_the_maximum(int n, int k) {
int i, j = 1;
int maxAND, maxOR, maxXOR = 0;
int AND, OR, XOR = 0;
for (i = 1; i <= n; i++) {
for (j = i + 1; j <= n; j++) {
AND = (i & j); OR = (i | j); XOR = (i ^ j);
if (AND > maxAND && AND < k) { maxAND = AND; }
if (OR > maxOR && OR < k) { maxOR = OR; }
if (XOR > maxXOR && XOR < k) { maxXOR = XOR; }
}
}
printf("%d\n%d\n%d", maxAND, maxOR, maxXOR);
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
calculate_the_maximum(n, k);
return 0;
}
在我看来,这应该可以工作,不幸的是,它打印出来了
2 24 3
而不是我的预期
2 3 3
更奇怪的是,有时程序会打印出一个看似随机的 maxAND 数,看起来像
1910024400 24 3
这很糟糕:当我每次包含调试语句时,程序都会打印出我所期望的内容。如果我添加这个
printf("I: %d J: %d OR: %d\n", i, j, OR);在第 13 行,程序现在打印出
我:1 焦:2 或:3 我:1 焦:3 或:3 我:1 焦:4 或:5 我:1 焦:5 或:5 我:2 焦:3 或:3 我:2 焦:4 或:6 我:2 焦:5 或:7 我:3 焦:4 或:7 我:3 焦:5 或:7 我:4 焦:5 或:5 2 3 3
这正是我所期望的。任何想法为什么这个程序只输出我期望的包含额外的 printf 的?
解决方案
您的max
变量在循环开始之前未初始化。它应该是:
void calculate_the_maximum(int n, int k) {
int i, j = 1;
int maxAND = 0, maxOR = 0, maxXOR = 0;
int AND, OR, XOR = 0;
for (i = 1; i <= n; i++) {
for (j = i + 1; j <= n; j++) {
AND = (i & j); OR = (i | j); XOR = (i ^ j);
if (AND > maxAND && AND < k) { maxAND = AND; }
if (OR > maxOR && OR < k) { maxOR = OR; }
if (XOR > maxXOR && XOR < k) { maxXOR = XOR; }
}
}
printf("%d\n%d\n%d", maxAND, maxOR, maxXOR);
}
推荐阅读
- javascript - 如何使文本对齐适用于强标签?
- django - 如何在不使用 for 循环的情况下以弹出模式显示数据?
- java - MessagingErrorCode 的成员对应的错误码是什么?
- python - 将yolov4权重转换为tflite时如何解决reshape ValueError?
- angularjs - 分享到谷歌课堂按钮未呈现
- authentication - 如何获得更多对 github-cli 的身份验证?
- php - 如何在 Wordpress 中获取 4 个随机图像并用作 4 个相关帖子的缩略图?
- php - ACF 画廊显示第一张图片并在点击时打开灯箱
- google-bigquery - 如何在不出现导航错误的情况下访问 BigQuery Web UI
- microsoft-teams - 为什么 Web 应用程序未在 MS-Teams 中加载