首页 > 其他分享 >Delphi 实现刘谦春晚魔术

Delphi 实现刘谦春晚魔术

时间:2024-02-21 10:33:43浏览次数:25  
标签:begin end CommaText 刘谦 Delphi list Writeln 春晚 forCount

试试看

program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils,
  System.Classes;

var
  list, removeElement: TStringList;
  i, NameCount, insertIndex, directCount, sexCount: Integer;
  tmp, element, hiddenEle1, hiddenEle2: String;

procedure Fun1(NameCount: Integer);
begin
  if NameCount < list.Count then
  begin
    for i := 0 to NameCount - 1 do
    begin
      element := list[0]; // 获取第0个元素
      list.Delete(0); // 移除第0个元素
      list.Add(element); // 将第0个元素添加到最后
    end;

  end;
end;

procedure Fun2(forCount: Integer);
begin
  // 被删除掉的三张牌
  removeElement := TStringList.Create;
  for i := 0 to forCount - 1 do
  begin
    removeElement.Add(list[0]);
    list.Delete(0);
  end;
  Writeln(Format('被删除掉的%D张牌:%s', [forCount, removeElement.CommaText]));
  Writeln('删除之后:' + list.CommaText);

  // 把拿到的三张牌插到中间
  Randomize;
  insertIndex := Random(list.Count - 1) + 1; // 生成一个介于第一个和倒数第二个位置之间的随机插入位置
  Writeln('插入位置:' + insertIndex.ToString);
  for i := removeElement.Count - 1 downto 0 do
  begin
    list.Insert(insertIndex, removeElement[i]);
  end;

end;

procedure Fun3();
begin
  // 藏起来第一张牌
  hiddenEle1 := list.Strings[0];
  list.Delete(0);
end;

procedure Fun4(Count: Integer);
begin
  for i := 0 to Count - 1 do
  begin
    list.Delete(0);
  end
end;

procedure Fun5();
begin
  for i := 0 to 6 do
  begin
    element := list[0];
    list.Delete(0);
    list.Add(element);
  end;
end;

function Fun6(sexCount: Integer): string;
var
  forCount: Integer;
begin
  forCount := 0;
  if sexCount = 1 then
    forCount := 5 // 男生要5次
  else
    forCount := 4;
  for i := 0 to forCount - 1 do
  begin
    // 把第一张牌放到数组最后面 (好运留下来)
    element := list[0];
    list.Delete(0);
    list.Add(element);

    // 烦恼丢出去
    list.Delete(0);
  end;
  result := list[0];
end;

begin
  try
    try
      list := TStringList.Create;
      list.CommaText := 'A,B,C,D,A,B,C,D';
      Writeln('初始牌组:' + list.CommaText);
      Writeln('请输入你的名字有几个字:');
      ReadLn(tmp);
      NameCount := tmp.ToInteger;

      Fun1(NameCount);
      Writeln('变化之后:' + list.CommaText);

      Fun2(3);
      Writeln('插入三张牌后:' + list.CommaText);
      Fun3();
      Writeln('藏起来第一张牌后:' + list.CommaText);

      Writeln('北方-1 南方-2 不南不北-3,请输入对应数字:');
      ReadLn(tmp);
      directCount := tmp.ToInteger;
      Fun2(directCount);
      Writeln('南北方人后:' + list.CommaText);

      Writeln('男-1 女-2,请输入对应数字:');
      ReadLn(tmp);
      sexCount := tmp.ToInteger;
      Fun4(sexCount);
      Writeln('男女生后:' + list.CommaText);

      Fun5();

      Writeln('见证奇迹后:' + list.CommaText);

      Writeln('开始好运留下了 烦恼丢出去');
      hiddenEle2 := Fun6(sexCount);
      Writeln(Format('牌1:%s  牌2:%s', [hiddenEle1, hiddenEle2]));

      ReadLn;
    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;

  finally
    removeElement.Free;
    list.Free;

  end;

end.

标签:begin,end,CommaText,刘谦,Delphi,list,Writeln,春晚,forCount
From: https://www.cnblogs.com/lant/p/18024621

相关文章

  • Delphi 实现刘谦春晚魔术
    看了博友的C#实现刘谦春晚魔术很好,改成了delphi版的。 1programProject1;23{$APPTYPECONSOLE}4{$R*.res}56uses7System.SysUtils,8System.Classes;910var11list,removeElement:TStringList;12i,NameCount,insertI......
  • 苹果科技春晚!iPhone 16系列看点汇总:设计、性能和iOS都升级了
    历年的苹果特别活动都能称得上是“科技圈春晚”,不知道果粉们对今年的iPhone 15系列都满意吗?反正从市场成绩上看,iPhone15系列的销量在国内市场已经不再保持领先地位,23年12月的市场份额同比减少17.7%之多,看来不满意,没换机的果粉还是占了多数。现在的消费者们已经不再满足于简单的......
  • delphi按键值对重组字符串
    问题背景:有一组基金代码串,原逻辑按基金代码单个调整为按父子基金代码组作为条件获取查询结果解决原理:采用TStringList类哈希表操作方式重组字符串List:=TStringList.Create;List.Add('aaa=111');List.Add('bbb=222');List.Add('ccc=333');List.Add('ddd=444');ShowMessag......
  • delphi base64的“坑”
    delphibase64的“坑”使用Delphi原生的Base64编码(System.NetEncoding单元),编码后的字符串每隔76个字符会增加一个回车换行(#13#10),这样就导致和其他语言对接的时候出现问题,特别是Base64以后再进行签名,例如MD5签名,就会导致签名不一致。回车换行不容易看到,所以查找问题比较困难。......
  • electron delphi winform wpf qt的对比
    Electron、Delphi、WinForms、WPF和Qt都是用于开发桌面应用程序的工具或框架,它们各自有一些独特的优点和适用场景。以下是对这些工具的简要对比:Electron:基于Web技术(HTML、CSS和JavaScript)的跨平台桌面应用程序开发框架。使用Chromium渲染引擎提供强大的页面渲染能力。适用......
  • Delphi 12 Patch1
    如果你升级到Delphi12,这个补丁是必须打的。官方也发布了ISO版本,如这个需要重新安装。https://altd.embarcadero.com/download/radstudio/12.0/radstudio_12_0_inline_116924a.isoQuality Portal Issues Addresses by This Patch (notice QP remains accessible in r......
  • C# 实现刘谦春晚魔术
    internalclassProgram{staticList<string>list=newList<string>(){"A","B","C","D","A","B","C","D"};staticstringhiddenEle1=string......
  • 2024春晚刘谦魔术揭秘
    2024春晚刘谦魔术揭秘!魔术步骤任意4张扑克牌,叠在一起对半撕开,再叠在一起名字有几个字,就把几张扑克,依次放到最下面再将最上面3张,插到剩下扑克牌的中间任意位置拿出最上面一张扑克牌藏起来任意拿出一张、两张或三张扑克牌,再插到剩下扑克牌的中间任意位置如果是男生拿一张,如......
  • 用代码解决刘谦春晚魔术
    相信很多人都看过文字解释了,来一段代码看看importrandomdefstep_move_one(length,array):whilelength>0:length-=1array=array[1:]+array[:1]returnarraydefstep_firstN_to_middle(firstN,array):iffirstN<0orfirstN>......
  • 关于刘谦2024春晚的数学游戏原理
    自己想出来的!首先牌的顺序肯定是形如\(ABCDABCD\)。将牌的顺序考虑成一个字符环。按照名字长度对该字符环进行左移,本质上没有打乱这个环的顺序。因此在置换后,牌的顺序还是会形如\(ABCDABCD\)。将前三张随机放到牌堆中间,我们发现此时牌堆顶和牌堆底的两张牌是一样的。因此......