c-从由整数组成的单行计算包号



我正在尝试以字符串形式读取数字列表,并计算应该有多少个包。每个包最多有50个。例如,"25 25 25 -1"的输出应该是2,但我得到的是1。

你能检查一下我的代码吗?

int main(void) {
int input = 0;
int diff = 50;
int output = 0;
printf("Input: n");
do {
scanf("%d", &input);
if (input < diff) {
diff -= input;
} else if (diff == input) {
diff = 50;
output++;
} else {
diff = 50 - input;
output++;
}
} while (input != -1);
printf("Output: %d", output);
return 0;
}

正如我在评论中提到的,您在循环的开始读取input一次,并在循环的结束将其与-1进行比较,因此-1将与其他input值一样得到处理。

显而易见的选择是在两个不同的地方读取,一个在循环之前,一个是在循环结束时,这样您将直接在循环条件之前获得一个新的input

printf("Input: n");
scanf("%d", &input);
while(input != -1) {
// Processing
scanf("%d", &input);
} 

请注意,我还将循环切换到了while循环,而不是do ... while循环,就好像提供的输入only包含-1,那么do ... while仍然会处理它,从而导致错误的输出。


您也没有考虑到在循环结束时包可能不完整,这可以通过检查循环后是否有未计数的包来解决:

printf("Input: n");
scanf("%d", &input);
while(input != -1) {
// Processing
scanf("%d", &input);
} 
if(diff != 50) {
output++;
}

请确保不要将"-1"用作已处理数据的一部分。

还要看看你的算法。

也许是这样的:

#include <stdio.h>
int main(void) {
int input = 0;
int load = 50;
int output = 0;
printf("Input: n");
while (1) {
if (scanf("%d", &input) != 1 || input > 50)
{
// Illegal input
exit(1);
}
if (input == - 1)
{
// Done
break;
}
if (load + input > 50)
{
++output;  // Take new package
load = 0;  // make it empty
}
load += input; // Put into package
};
printf("Output: %d", output);
return 0;
}

最新更新