如何用Pascal统计文件中整数的出现次数并找出最值?
用Pascal简便统计文件中整数的出现次数(最多/最少)
嘿,作为Pascal新手,你现在用固定变量逐个读取的方式确实不够灵活——如果文件里的数字数量变了,代码就得重写,太麻烦啦!咱们换个更通用、简便的思路:用数组统计每个数字的出现次数,不管文件里有多少个数字,都能轻松处理。
核心思路
- 准备一个计数数组:数组的下标对应文件里的整数,数组的值对应该整数出现的次数。
- 循环读取文件所有数字:直到文件结束,每读到一个数就把对应数组位置的计数+1。
- 遍历计数数组:找出出现次数最多和最少的整数及其次数。
优化后的完整代码
program CountNumberOccurrences; var F: Text; CurrentNum: Integer; // 假设文件中的整数范围是1到100,可根据实际情况调整上下限 CountArray: array[1..100] of Integer; MaxOccur, MinOccur, MaxNum, MinNum, i: Integer; begin // 初始化计数数组所有元素为0 for i := 1 to 100 do CountArray[i] := 0; // 打开目标文件 Assign(F, 'sample.txt'); Reset(F); // 循环读取文件内所有整数,直到文件末尾 while not Eof(F) do begin read(F, CurrentNum); CountArray[CurrentNum] := CountArray[CurrentNum] + 1; end; Close(F); // 初始化最大/最小出现次数的初始值 MaxOccur := 0; // 用Pascal内置的最大整数初始化,确保第一个有效计数会覆盖它 MinOccur := MaxInt; // 遍历计数数组,找出最多和最少出现的数字 for i := 1 to 100 do begin // 只统计实际出现过的数字(计数>0) if CountArray[i] > 0 then begin // 更新最大出现次数 if CountArray[i] > MaxOccur then begin MaxOccur := CountArray[i]; MaxNum := i; end; // 更新最小出现次数 if CountArray[i] < MinOccur then begin MinOccur := CountArray[i]; MinNum := i; end; end; end; // 输出结果 writeln('出现次数最多的整数: ', MaxNum, ',共出现 ', MaxOccur, ' 次'); writeln('出现次数最少的整数: ', MinNum, ',共出现 ', MinOccur, ' 次'); end.
关键细节说明
- 灵活读取文件:用
while not Eof(F)循环代替固定数量的read,自动处理任意数量的数字,不用提前知道文件里有多少个数。 - 计数数组的范围:示例中假设数字是1-100,如果你的文件里有负数或者更大的数,只需要调整数组的下标范围(比如
array[-50..150]),同时初始化循环也要覆盖新的范围。 - 避免无效统计:遍历数组时只考虑
CountArray[i] > 0的情况,不会把从未出现过的数字(计数为0)当成“出现次数最少”的情况。
对比你原代码的优势
- 不用声明一堆冗余的变量(V1到V10),代码更简洁
- 扩展性强:文件数字数量或范围变化时,只需微调数组范围,不用重构读取逻辑
- 逻辑清晰:统计和结果查找分离,更容易理解和调试
内容的提问来源于stack exchange,提问作者J Pham
相关产品推荐
相关产品推荐

