#include <stdio.h>
int main() {
int n;
int arr[100];
scanf("%d", &n);
// 读取整数序列
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 使用两层循环比较每个元素与其后面的元素
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] == arr[j]) {
arr[j] = -1; // 将重复出现的元素置为特殊值-1
}
}
}
// 统计不等于特殊值的元素个数
int count = 0;
for (int i = 0; i < n; i++) {
if (arr[i] != -1) {
count++;
}
}
printf("%d\n", count);
return 0;
}
这个特殊值,如果设置为任意的非0数,提交都会得到满分,一旦设置为0就得不到满分了。我的笨比猪脑想不通,于是问了GPT,他说:
这个问题的原因可能是因为在C语言中,0被视为false,非0的数被视为true。在这段代码中,将重复出现的元素置为特殊值-1,相当于将其置为true,而将特殊值设为0,则会被视为false。
下面是这个统计过程的演示:
假设输入的整数序列为:1 2 3 2 4 5 3
首先使用两层循环比较每个元素与其后面的元素,将重复出现的元素置为特殊值-1,此时数组arr中的元素变为:1 2 3 -1 4 5 -1
然后统计不等于特殊值的元素个数,即不等于-1的元素个数,此时count为5,即输出5。
如果将特殊值修改为0,则数组arr中的元素变为:1 2 3 0 4 5 0
此时统计不等于特殊值的元素个数,即不等于0的元素个数,此时count为7,即输出7。因为数组中存在两个值为0的元素,它们都被计入了count的统计中。
所以以后在处理类似的情况要避免使用0,还是-1好使。
AI真是个好老师啊。既然AI对人的帮助这么大,早晚有一天程序员都要用AI辅助工作的吧?既然这样为啥不现在就把AI的使用纳入教学之中嘞?>.<