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

Pascal车牌项目4位数字排列 过滤对称重复组合实现求助

Pascal 4位车牌组合生成(排除对称重复序列)

核心需求

  • 基于输入的4个数字生成从左到右排列的全组合
  • 排除从右往左读和从左往右读完全相同的对称(回文)组合,即形如abba、1221这类正反读一致的序列
  • 原代码存在排列生成逻辑错误、数组访问语法错误、对称判断逻辑错位的问题,无法实现预期效果

原代码问题梳理

  • 排列生成过程mistura中的数组赋值逻辑错误,无法正确生成所有排列
  • 对称判断的条件写法不符合Pascal数组访问语法,且判断位置放在输出循环中,逻辑错位
  • 输入读取逻辑错误,原代码直接向结果数组的第一行读取4次输入,没有单独存储基础输入数字
  • 输出循环硬编码遍历24个数组位置,没有匹配实际有效组合的数量,会输出大量无效0值

修正后可运行代码

program placa_generator;
type 
  placa = array [1..4] of integer;
var 
  a4num : array [1..24] of placa; // 4个不同数字全排列共24种,预留足够存储空间
  linha : integer;
const 
  MAXDIG = 4;

// 数组元素交换工具过程
procedure swap(var arr: placa; i,j: integer);
var tmp: integer;
begin
  tmp := arr[i];
  arr[i] := arr[j];
  arr[j] := tmp;
end;

procedure mistura(input : placa; index : integer);
var 
  p : integer;
  tmp_plate : placa;
begin
  // 递归到最后一位时,判断是否为有效组合
  if index = MAXDIG then
  begin
    // 4位对称回文判断规则:第1位=第4位 且 第2位=第3位,非对称组合才存入结果
    if not ((input[1] = input[4]) and (input[2] = input[3])) then
    begin
      a4num[linha] := input;
      linha := linha + 1;
    end;
    exit;
  end;

  tmp_plate := input;
  for p := index to MAXDIG do
  begin
    swap(tmp_plate, index, p);
    mistura(tmp_plate, index + 1);
    swap(tmp_plate, index, p); // 回溯还原数组状态,保证排列生成正确
  end;
end;

var 
  i : integer;
  base_plate : placa;
begin
  linha := 1;
  writeln('请输入4个用于生成车牌的数字,每行输入1个:');
  for i := 1 to MAXDIG do
    readln(base_plate[i]);
  
  mistura(base_plate, 1);

  writeln('=== 排除对称组合后的有效车牌序列 ===');
  for i := 1 to linha - 1 do
  begin
    write(a4num[i][1],a4num[i][2],a4num[i][3],a4num[i][4]);
    writeln;
  end;
  readln; // 防止运行后直接退出窗口
end.

关键实现说明

  • 对称过滤直接嵌入排列生成的递归终止节点,不需要等所有排列生成完再二次遍历过滤,执行效率更高
  • 全排列采用标准回溯交换实现,替换原代码中错误的数组拷贝逻辑,保证所有排列都能被正确生成
  • 用linha变量动态计数有效组合的实际数量,输出时只遍历有效存储位,不会输出无效的占位0值
  • 4位对称组合的判断逻辑固定:只要第一位和第四位相等、第二位和第三位相等,就属于正反读完全一致的重复组合,直接跳过即可

内容的提问来源于stack exchange,提问作者Matheus V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:06:12