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

Delphi 实现刘谦春晚魔术

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

看了博友的C# 实现刘谦春晚魔术很好,改成了delphi版的。 

  1 program Project1;
  2 
  3 {$APPTYPE CONSOLE}
  4 {$R *.res}
  5 
  6 uses
  7   System.SysUtils,
  8   System.Classes;
  9 
 10 var
 11   list, removeElement: TStringList;
 12   i, NameCount, insertIndex, directCount, sexCount: Integer;
 13   tmp, element, hiddenEle1, hiddenEle2: String;
 14 
 15 procedure Fun1(NameCount: Integer);
 16 begin
 17   if NameCount < list.Count then
 18   begin
 19     for i := 0 to NameCount - 1 do
 20     begin
 21       element := list[0]; // 获取第0个元素
 22       list.Delete(0); // 移除第0个元素
 23       list.Add(element); // 将第0个元素添加到最后
 24     end;
 25 
 26   end;
 27 end;
 28 
 29 procedure Fun2(forCount: Integer);
 30 begin
 31   // 被删除掉的三张牌
 32   removeElement := TStringList.Create;
 33   for i := 0 to forCount - 1 do
 34   begin
 35     removeElement.Add(list[0]);
 36     list.Delete(0);
 37   end;
 38   Writeln(Format('被删除掉的%D张牌:%s', [forCount, removeElement.CommaText]));
 39   Writeln('删除之后:' + list.CommaText);
 40 
 41   // 把拿到的三张牌插到中间
 42   Randomize;
 43   insertIndex := Random(list.Count - 1) + 1; // 生成一个介于第一个和倒数第二个位置之间的随机插入位置
 44   Writeln('插入位置:' + insertIndex.ToString);
 45   for i := removeElement.Count - 1 downto 0 do
 46   begin
 47     list.Insert(insertIndex, removeElement[i]);
 48   end;
 49 
 50 end;
 51 
 52 procedure Fun3();
 53 begin
 54   // 藏起来第一张牌
 55   hiddenEle1 := list.Strings[0];
 56   list.Delete(0);
 57 end;
 58 
 59 procedure Fun4(Count: Integer);
 60 begin
 61   for i := 0 to Count - 1 do
 62   begin
 63     list.Delete(0);
 64   end
 65 end;
 66 
 67 procedure Fun5();
 68 begin
 69   for i := 0 to 6 do
 70   begin
 71     element := list[0];
 72     list.Delete(0);
 73     list.Add(element);
 74   end;
 75 end;
 76 
 77 function Fun6(sexCount: Integer): string;
 78 var
 79   forCount: Integer;
 80 begin
 81   forCount := 0;
 82   if sexCount = 1 then
 83     forCount := 5 // 男生要5次
 84   else
 85     forCount := 4;
 86   for i := 0 to forCount - 1 do
 87   begin
 88     // 把第一张牌放到数组最后面 (好运留下来)
 89     element := list[0];
 90     list.Delete(0);
 91     list.Add(element);
 92 
 93     // 烦恼丢出去
 94     list.Delete(0);
 95   end;
 96   result := list[0];
 97 end;
 98 
 99 begin
100   try
101     try
102       list := TStringList.Create;
103       list.CommaText := 'A,B,C,D,A,B,C,D';
104       Writeln('初始牌组:' + list.CommaText);
105       Writeln('请输入你的名字有几个字:');
106       ReadLn(tmp);
107       NameCount := tmp.ToInteger;
108 
109       Fun1(NameCount);
110       Writeln('变化之后:' + list.CommaText);
111 
112       Fun2(3);
113       Writeln('插入三张牌后:' + list.CommaText);
114       Fun3();
115       Writeln('藏起来第一张牌后:' + list.CommaText);
116 
117       Writeln('北方-1 南方-2 不南不北-3,请输入对应数字:');
118       ReadLn(tmp);
119       directCount := tmp.ToInteger;
120       Fun2(directCount);
121       Writeln('南北方人后:' + list.CommaText);
122 
123       Writeln('男-1 女-2,请输入对应数字:');
124       ReadLn(tmp);
125       sexCount := tmp.ToInteger;
126       Fun4(sexCount);
127       Writeln('男女生后:' + list.CommaText);
128 
129       Fun5();
130 
131       Writeln('见证奇迹后:' + list.CommaText);
132 
133       Writeln('开始好运留下了 烦恼丢出去');
134       hiddenEle2 := Fun6(sexCount);
135       Writeln(Format('牌1:%s  牌2:%s', [hiddenEle1, hiddenEle2]));
136 
137       ReadLn;
138     except
139       on E: Exception do
140         Writeln(E.ClassName, ': ', E.Message);
141     end;
142 
143   finally
144     removeElement.Free;
145     list.Free;
146 
147   end;
148 
149 end.

 

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

相关文章

  • 苹果科技春晚!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\)。将前三张随机放到牌堆中间,我们发现此时牌堆顶和牌堆底的两张牌是一样的。因此......
  • delphi 主窗体的 生命周期,如何 自己管理 而不是 自动管理
    在Delphi中,窗体的生命周期通常是由VCL(VisualComponentLibrary)自动管理的。但是,你可以通过一些手段来自己管理主窗体的生命周期,而不是完全依赖于自动管理。要自己管理主窗体的生命周期,你可以考虑以下几个方面:创建窗体:你可以手动创建窗体实例,而不是依赖于Application.Cre......