揭秘刘谦春晚魔术,使用C#实现刘谦春晚魔术
2024年的春晚上,刘谦表演了一个魔术,是让所有人可以参与的一个魔术,那么他是怎么让所有人实现的呢? 这个扑克牌魔术究竟有怎样的奥秘?
咱们一起从数学的角度出发,带大家感受这一魔术的魅力
魔 术 步 骤
首先,准备4张扑克牌,跟随魔术步骤来一起“见证奇迹”
步骤1:将准备好的4张扑克牌,平均撕成两份并叠在一起
步骤2:将牌堆顶数量为【名字字数】的牌移至牌堆底
步骤3:将前三张牌放在牌堆中间并取出牌堆顶的牌放置在一旁
步骤4:取出牌堆顶的若干张牌,插入牌堆中间,此处选择的牌数为,南方人取1张,北方人取2张,若不确定是南方人还是北方人取3张
步骤5:男生扔掉牌堆顶1张,女生扔掉牌堆顶2张
步骤6:执行“见证奇迹的时刻”循环,每说一个字,就取出牌堆顶一张牌放置在牌堆底
步骤7:执行如下操作,从牌堆顶开始,每次先将牌堆顶的一张牌放在牌堆底,再扔掉牌堆顶的一张牌,重复以上操作直到只剩一张牌,检查此牌和放置在一旁的牌是否吻合,若吻合,则魔术成功
=======================================================================================
揭秘刘谦春晚魔术,发现了尼格买提翻车的那一步!
出处:https://mp.weixin.qq.com/s?__biz=Mzg2MTg4MDcxMQ==&mid=2247542022&idx=1&sn=dfa79533ce79ec703f96378514871677
=======================================================================================
C#代码实现过程
下面是使用代码实现的过程:
internal class Program
{
static List<string> list=new List<string>() { "A","B","C","D","A","B","C","D" };
static string hiddenEle1 = string.Empty;//第一次藏起来的牌
static void Main(string[] args)
{
Console.WriteLine($"初始牌组:{string.Join(',',list)}");
//第一趴 名字有几个字
Console.WriteLine("请输入你的名字有几个字");
var nameCount = Convert.ToInt32(Console.ReadLine());
Fun1(nameCount);
Console.WriteLine($"变化之后:{string.Join(',', list)}");
//第二趴 拿掉三张牌
Fun2(3);
Console.WriteLine($"插入三张牌后:{string.Join(',', list)}");
//第三趴 把最上面一张牌藏起来
Fun3();
Console.WriteLine($"藏起来第一张牌后:{string.Join(',', list)}");
//第四趴南方人北方人
Console.WriteLine("北方-1 南方-2 不南不北-3,请输入对应数字");
var directCount=Convert.ToInt32(Console.ReadLine());
Fun2(directCount);
Console.WriteLine($"南北方人后:{string.Join(',', list)}");
//第五趴 男女生
Console.WriteLine("男-1 女-2,请输入对应数字");
var sexCount = Convert.ToInt32(Console.ReadLine());
Fun4(sexCount);
Console.WriteLine($"男女生后:{string.Join(',', list)}");
//第六趴 见证奇迹的时刻
Fun5();
Console.WriteLine($"见证奇迹后:{string.Join(',', list)}");
//第七趴 好运留下来烦恼丢出去
Console.WriteLine("开始好运留下了 烦恼丢出去");
var hiddenEle2 = Fun6(sexCount);
Console.WriteLine($"牌1:{hiddenEle1} 牌2:{hiddenEle2}");
}
private static void Fun1(int nameCount)
{
if (nameCount >= list.Count)
{
// 如果 nameCount 大于或等于列表长度,则不需要进行操作
return;
}
for (int i = 0; i < nameCount; i++)
{
string element = list[0]; // 获取第0个元素
list.RemoveAt(0); // 移除第0个元素
list.Add(element); // 将第0个元素添加到最后
}
}
private static void Fun2(int forCount)
{
//被删除掉的三张牌
var removeElement = new List<string>();
for (int i = 0; i < forCount; i++)
{
removeElement.Add(list[0]);
list.RemoveAt(0);
}
//把拿到的三张牌插到中间
var random = new Random();
int insertIndex = random.Next(1, list.Count - 1); // 生成一个介于第一个和倒数第二个位置之间的随机插入位置
for (int i = removeElement.Count - 1; i >= 0; i--)
{
list.Insert(insertIndex, removeElement[i]);
}
}
private static void Fun3()
{
//把第一张牌藏起来
hiddenEle1 = list[0];
list.RemoveAt(0);
}
private static void Fun4(int count)
{
for (int i = 0; i < count; i++)
{
list.RemoveAt(0);
}
}
private static void Fun5()
{
for (int i = 0; i < 7; i++)
{
string element = list[0];
list.RemoveAt(0);
list.Add(element);
}
}
private static string Fun6(int sexCount)
{
int forCount = 0;
if (sexCount == 1) forCount = 5;//男生要5次
else forCount = 4;
for (int i = 0; i < forCount; i++)
{
// 把第一张牌放到数组最后面 (好运留下来)
string element = list[0];
list.RemoveAt(0);
list.Add(element);
//烦恼丢出去
list.RemoveAt(0);
}
return list[0];
}
}
2024-02-19 16:58:08【出处】:https://www.cnblogs.com/cyfj/p/18017196
=======================================================================================
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/18021504
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!