在线编译器 C

#include <stdio.h> enum { SIZE = 10 }; int main() { int A[SIZE]; for (int i = 0; i < SIZE; i++) { scanf("%d", &A[i]); } int max=A[0], times_max = 0, times = 0; for (int i = 0; i < SIZE; i++) { times = 0; for (int j = 0; j < SIZE; j++) { if (A[i] == A[j]) { times++; } } if (times > times_max) { times_max = times; max = A[i]; } } printf("%d", max); return 0; }
这段代码的功能是:读入10个整数,然后找出其中出现次数最多的那个数,并输出它。如果多个数出现次数相同,它会输出其中最先被检查到的那个(即循环中第一个达到最大次数的数)。

代码的逻辑是:对于数组中的每个元素,统计它在整个数组中出现的次数,然后记录出现次数最多的那个元素。

- 你的代码在统计次数时,内层循环对每个元素都重新遍历整个数组,这样做虽然正确,但效率较低。更关键的是,当出现次数相同时,你的代码会更新为后遇到的元素,但题目可能要求输出第一个达到最大次数的元素?这取决于题目要求,但你的代码目前是输出最后一个达到最大次数的元素(因为只有 `times > times_max` 时才更新,相等时不更新)。

- 另外,你的变量 `times` 在内层循环前重置为0,但可以思考一下:是否真的需要每次都对整个数组重新统计?有没有更高效的方法?