模拟赛 红蓝牌

解决一个有趣的编程问题,根据牌面颜色推断出牌上的数字,特别关注质数的识别和排序技巧。
题目:
    明明有N张牌,正面按编号写有数字1到N(每个数字只出现一次)。每张牌的反面根据正面的数字涂上两种颜色。如果正面的数字是质数,则为红色,反之为蓝色。 
明明的老师从这N张牌里选出了一些,按数字从小到大排序后全部反面向上放成一行。他要明明判断这些牌上的数字。


输入格式

    第一行:一个正整数N, 1 <= N <= 1000.  
    第二行:一个字符串,长度 K 在 1 到 50 之间。字符串中只有'R'和'B','R'表示红色,'B'表示蓝色。

输出格式:
    一行,有K个整数,每个整数代表相应位置上的牌的正面数字。如果某张牌不能确定上面的数字,否则输出-1.
输入样例:
样例1
5
RRR
样例2
7
BBB
样例3
6
RBR

输出样例:
样例1
2  3  5
样例2
1  4  6
样例3

-1  4  5


解题思路:

    正的反的做一遍,若某一张牌的两个值不同,则为-1.


代码:

var
  n,m,num,i,j,k,t,z,ii,jj:longint;
  a,b,s:array[0..2000]of longint;
  st:ansistring;
  c:char;
  f:array[0..2000]of boolean;


procedure csh(x:longint);
var
  i,j:longint;
begin
  for i:=2 to n do
    if f[i]=true then
    begin
      for j:=2 to n div i do
        f[i*j]:=false;
    end;
end;


begin
  fillchar(f,sizeof(f),true);
  f[1]:=false;
  readln(n);
  csh(n);
  readln(st);
  j:=0;
  for i:=1 to length(st) do
    begin
      inc(j);
      if st[i]='R' then
      begin
        if f[j]=true then
          a[i]:=j
        else begin
               while f[j]=false do
                 inc(j);
               a[i]:=j;
             end;
      end;
      if st[i]='B' then
      begin
        if f[j]=false then
          a[i]:=j
        else begin
               while f[j]=true do
                 inc(j);
               a[i]:=j;
             end;
      end;
    end;
  j:=n+1;
  for i:=length(st) downto 1 do
    begin
      dec(j);
      if st[i]='R' then
      begin
        if f[j]=true then
          b[i]:=j
        else begin
               while f[j]=false do
                 dec(j);
               b[i]:=j;
             end;
      end;
      if st[i]='B' then
      begin
        if f[j]=false then
          b[i]:=j
        else begin
               while f[j]=true do
                 dec(j);
               b[i]:=j;
             end;
      end;
    end;
  for i:=1 to length(st) do
    if a[i]<>b[i] then write('-1 ')
      else write(a[i],' ');
end.






Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值