You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pascal统计文件中整数的出现次数并找出最值?

用Pascal简便统计文件中整数的出现次数(最多/最少)

嘿,作为Pascal新手,你现在用固定变量逐个读取的方式确实不够灵活——如果文件里的数字数量变了,代码就得重写,太麻烦啦!咱们换个更通用、简便的思路:用数组统计每个数字的出现次数,不管文件里有多少个数字,都能轻松处理。

核心思路

  1. 准备一个计数数组:数组的下标对应文件里的整数,数组的值对应该整数出现的次数。
  2. 循环读取文件所有数字:直到文件结束,每读到一个数就把对应数组位置的计数+1。
  3. 遍历计数数组:找出出现次数最多和最少的整数及其次数。

优化后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:25:18