如果电梯内的人的目的地与另一层相邻,则他们无法按下按钮。该程序计算可以按下按钮的人数。当代码编译并正确运行时,使用的检查软件已用运行错误标记我的答案。我怀疑这与内存集有关,可能与语法有关。
#include <stdio.h>
#include <string.h>
int status[20]; // stores whether a button is pressed for a floor
int main() {
int t, n, i, j; //t is the number of cases, j is the case counter, n is the number of people choosing floors, i is the people counter
scanf("%d", &t);
j = 1;
while (j <= t) {
scanf("%d", &n);
int cnt = 0; // counter variable to store the no of floors pressed
for (i = 0; i < n; i++) {
int x;
scanf("%d", &x);
if (!status[x - 1] && !status[x + 1])
// checks if both upper and lower floors aren't pressed
status[x] = 1, cnt++; // sets status to 1 and increments counter
}
printf("Case #%d: %d\n", j, cnt);
memset(status, 0, n * sizeof(int));
j++;
}
}
答案 0 :(得分:1)
如果您运行的是传统C语言,我已经发现一些简单的语法错误,这些错误不会在传统C语言中进行编译,但是在C ++环境中可以正常工作。我不知道您使用什么进行编译,只是基于此页面上显示的代码进行编译。为了避免冲突,我将做一些更正。
您的整数值应始终在函数调用的顶部声明,对于在Visual Studio中某些scanf情况下会引发错误的声明,也应声明 CRT_SECURE_NO_WARNINGS :
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
int t, n, i, j = 1; //t is the number of cases, j is the case counter, n is the number of people choosing floors, i is the people counter
int cnt = 0; // counter variable to store the no of floors pressed
int x;
int status[20]; // stores whether a button is pressed for a floor
scanf("%d", &t);
while (j <= t) {
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &x);
/*Checks if both upper and lower floors aren't pressed*/
if (!status[x - 1] && !status[x + 1])
{
status[x] = 1, cnt++; // sets status to 1 and increments counter
}
}
printf("Case #%d: %d\n", j, cnt);
memset(status, 0, n * sizeof(int));
j++;
}
}
免责声明:如果您将此代码用于电梯应用程序,则不对您在此处使用此处键入的内容负责,我对此不承担任何责任。在使用前必须确保专业人员安全。