数码问题 (Standard IO)

本文介绍了一个关于表格旋转移动的问题,即如何将特定数值通过旋转行和列的方式移动到指定位置,并提供了一种解决方法及其实现代码。文章还讨论了对于一系列数值按顺序移动时的操作次数计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意/Description:

       Alice有一个N*N的格子,把1-N^2按照从上到下从左到右的顺序填进表格中,允许在表格上进行两种操作:
  (1)旋转行——这一行的数向右移动一个位置,而最后一列的数会移到第一列;
  (2)旋转列——这一列的数向下移动一个位置,最后一行的数会移到第一行。
  Alice想把数X移到(R,C)处可以采用以下方法:
  如果X不在C这一列,通过旋转行操作把X移到C这一列;

       如果X不在R这一行,通过旋转列操作把X移到R这一行。下面是一个把6移到(3,4)的例子:

       Alice现在想采用上述方法,依次把K个数移到各自的目标位置,编程计算每个数需要几次操作。

 

读入/Input

       第一行包含两个整数N(12<=N<=10000)和K(1<=K<=1000)。
  接下来K行,每行包含三个整数X(1<=X<=N^2)、R和C(1<=R,C<=N),描述需要移动的数以及目标位置。
  Alice必须按照输入顺序依次移动。

 

输出/Output

       输出K行,每行输出一个整数,表示操作次数。

 

题解/solution

       首先,第一个数大家肯定会做。大家把这个数所在的行数记录下来,移动了多少,然后把要到达的点的列数记录下来,移动了多少。之后读入的数,把前面暴力一下,看看那些与之后的点有关,得出点的位置。总而言之,就是一个优美的暴力。之后就帮我点个赞吧,提提建议。

 

代码/Code

 

var
  n,k:longint;
  x,y,xx,yy:array [0..100001] of longint;
procedure init;
var
  i,j,o,p,z:longint;
begin
  readln(n,k);
  for i:=1 to k do
    begin
      readln(z,x[i],y[i]);
      o:=z div n;
      if z mod n=0 then p:=n else
        begin
          o:=o+1;
          p:=z mod n;
        end;
      for j:=1 to i-1 do
        begin
          if x[j]=o then p:=(p+xx[j]) mod n;
          if p=0 then p:=n;
          if y[j]=p then o:=(o+yy[j]) mod n;
          if o=0 then o:=n;
        end;
      if y[i]<p then xx[i]:=y[i]+n-p else xx[i]:=y[i]-p;
      if x[i]<o then yy[i]:=x[i]+n-o else yy[i]:=x[i]-o;
      x[i]:=o;
      writeln(xx[i]+yy[i]);
    end;
end;

begin
  init;
end.



 

信号类型 信号名 引脚号 可用性 板载资源 系统时钟 clk PIN_143 ✔️ CLK1 (6MHz) 复位控制 reset PIN_1 ✔️ K0 (按键开关) 模式选择 sw_mode PIN_2 ✔️ A0 (拨码开关) 段数控制 sw_seg[0] PIN_3 ✔️ A1 (拨码开关) sw_seg[1] PIN_4 ✔️ A2 (拨码开关) 方向控制 sw_dir PIN_5 ✔️ K1 (按键开关) 数码管段选 seg_out[0] (A) PIN_60 ✔️ 段选信号A seg_out[1] (B) PIN_61 ✔️ 段选信号B seg_out[2] (C) PIN_63 ✔️ 段选信号C seg_out[3] (D) PIN_64 ✔️ 段选信号D seg_out[4] (E) PIN_65 ✔️ 段选信号E seg_out[5] (F) PIN_67 ✔️ 段选信号F seg_out[6] (G) PIN_68 ✔️ 段选信号G 数码管位选 dig_out[0] PIN_70 ✔️ SEL0 (数码管1) dig_out[1] PIN_71 ✔️ SEL1 (数码管2) dig_out[2] PIN_72 ✔️ SEL2 (数码管3) dig_out[3] PIN_73 ✔️ SEL3 (数码管4) dig_out[4] PIN_74 ✔️ SEL4 (数码管5) dig_out[5] PIN_75 ✔️ SEL5 (数码管6) dig_out[6] PIN_76 ✔️ SEL6 (数码管7) dig_out[7] PIN_77 ✔️ SEL7 (数码管8) 注:上述所有引脚已在 EDA-I 平台说明书中明确标注为用户 I/O 引脚(图1-5/1-6/1-7),完全可用。 不可用引脚说明(需避免使用) 根据 FLEX 10K 数据手册,以下引脚有特殊功能,不能用作普通 I/O: 引脚号 功能 说明 PIN_139 nCONFIG 配置控制引脚 PIN_138 nSTATUS 配置状态引脚 PIN_137 CONF_DONE 配置完成指示 PIN_136 DCLK 配置时钟 PIN_135 DATA0 配置数据线0 PIN_134 DATA1 配置数据线1 PIN_133 DATA2 配置数据线2 PIN_132 DATA3 配置数据线3 PIN_131 DATA4 配置数据线4 PIN_130 DATA5 配置数据线5 PIN_129 DATA6 配置数据线6 PIN_128 DATA7 配置数据线7 PIN_144 VCCIO I/O 供电引脚 PIN_142 GND 接地引脚 PIN_141 VCCINT 内核电压引脚 验证方法 检查引脚分配报告: 编译后打开 Compilation Report > Fitter > Resource Section > Pin-Out File 确认所有信号都分配了引脚 信号探测: tcl # 在Tcl控制台输入以下命令 get_pin_assignment -to clk get_pin_assignment -to reset # ... 其他信号 硬件测试: vhdl -- 简单测试代码 dig_out <= "01010101"; -- 交替点亮数码管 seg_out <= "10101010"; -- 交替点亮段 推荐配置步骤 Pin Planner 设置: Signal | Location | I/O Standard | Current Strength | Weak Pull-Up | ------------|----------|--------------|------------------|-------------| clk | PIN_143 | 3.3-V LVTTL | 8mA | Off | reset | PIN_1 | 3.3-V LVTTL | 8mA | Off | ... | ... | ... | ... | ... | 未使用引脚设置: Assignments > Device > Device and Pin Options Unused Pins > Reserve all unused pins: As input tri-stated 最终确认 根据您提供的: 芯片型号:EPF10K20TC144-3 平台型号:EDA-I 说明书内容 确认上述引脚分配完全正确且安全可用。这些引脚是: 所有输入控制:PIN_1 到 PIN_5 数码管段选:PIN_60 到 PIN_68 数码管位选:PIN_70 到 PIN_77 如果仍有问题,可能是: 物理损坏:用万用表检测引脚通断 配置错误:检查 Quartus 中器件型号是否为 EPF10K20TC144-3 电压问题:确保开发板供电稳定(USB 5V) 请使用此方案进行最终编译和下载,应该能成功实现霓虹灯效果。 重写,8~10,17~23,26~33,78~83,95~102yiji142号引脚可用
最新发布
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值