我有任务:
给定
S = {1,2,3,..., n}
,找到:
a&b
的最大值小于给定的整数k
,其中a
和b
(其中a < b
)是两个集合S
中的整数。
a|b
的最大值小于给定的整数k
,其中a
和b
(其中a < b
)是两个集合S
中的整数。
a^b
的最大值小于给定的整数k
,其中a
和b
(其中a < b
)是两个集合S
中的整数。
尽管我找不到错误,但我的代码无法工作
有以下测试案例:
输入:5 4
输出:
2
3
3
但是我的输出是:
1382045904
24
3
我的代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void calculate_the_maximum(int n, int k) {
int max_and, max_or, max_xor = -1;
for (int a = 0; a < n; a++) {
for (int b = a + 1; b <= n; b++) {
int currently_and = a & b, currently_or = a | b, currently_xor = a ^ b;
if ((max_and < currently_and) && (currently_and < k)) {
max_and = currently_and;
}
if ((currently_or > max_or) && (currently_or < k)) {
max_or = currently_or;
}
if ((currently_xor > max_xor) && (currently_xor < k)) {
max_xor = currently_xor;
}
}
}
printf("%d\n%d\n%d\n", max_and, max_or, max_xor);
}
答案 0 :(得分:0)
max_and
和max_or
在您的代码中未初始化,因此它们包含垃圾值。
更具体地说,
int max_and, ...
for(int a = 0; a < n; a++){
for(int b = a + 1; b <= n; b++){
int currently_and = a & b, currently_or = a | b, currently_xor = a ^ b;
if ((max_and < ...
尝试在设置之前max_and
进行读取。这将访问不确定的值,因此代码具有未定义的行为。
答案 1 :(得分:0)
max_and
和max_or
未未初始化。
C中未初始化的值包含垃圾值,该值通常是一些大的正整数。
将它们初始化为0。此外,建议使用 long 类型,因为评估值可能会变得很大。
long int max_and = 0
和long int max_or = 0