【发布时间】:2020-05-27 20:25:43
【问题描述】:
我正在努力解决这个挑战:
任务: 给定集合 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 的?
【问题讨论】:
标签: c for-loop printf bitwise-operators