任务是: 从文件input.txt输入并输出到文件output.txt 第一行是目标编号。 第二行是正整数1..999999999的序列。
如果这些整数中的任意两个之和等于目标,则程序必须输出1,否则输出0。
例:
5
1 7 3 4 7 9
输出1
有我的程序。它通过了5次测试,但第6次失败-错误的结果。我需要帮助来查找错误或将其重写。
#include <stdio.h>
int main() {
FILE *fs = fopen("input.txt", "r");
int target;
fscanf(fs, "%d", &target);
unsigned char bitset[1 + target / 8];
int isFound = 0;
for (int number; !isFound && fscanf(fs, "%d", &number) == 1;) {
if (number <= target) {
const int compliment = target - number;
isFound = (bitset[compliment / 8] & (1 << (compliment % 8))) > 0;
bitset[number / 8] |= 1 << (number % 8);
}
}
fclose(fs);
fs = fopen("output.txt", "w");
fprintf(fs,"%d", isFound);
fclose(fs);
return 0;
}