扑克牌洗牌模型.docx

上传人:b****8 文档编号:10297140 上传时间:2023-02-09 格式:DOCX 页数:11 大小:38.87KB
下载 相关 举报
扑克牌洗牌模型.docx_第1页
第1页 / 共11页
扑克牌洗牌模型.docx_第2页
第2页 / 共11页
扑克牌洗牌模型.docx_第3页
第3页 / 共11页
扑克牌洗牌模型.docx_第4页
第4页 / 共11页
扑克牌洗牌模型.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

扑克牌洗牌模型.docx

《扑克牌洗牌模型.docx》由会员分享,可在线阅读,更多相关《扑克牌洗牌模型.docx(11页珍藏版)》请在冰豆网上搜索。

扑克牌洗牌模型.docx

扑克牌洗牌模型

《数学模型》课程结业论文

 

扑克牌洗牌模型

 

任务书

[要求]

1、将所给的问题翻译成汉语;

2、给论文起个题目(名字或标题)

3、根据任务来完成数学模型论文;

4、论文书写格式要求按给定要求书写;

5、态度要认真,要独立思考,独立完成任务;

6、论文上交时间:

6月1日前(要求交纸质论文和电子文档)。

7、严禁抄袭行为,若发现抄袭,则成绩记为“不及格”。

[任务]

一天,魔术师表演了这样一个节目:

将一副看起来杂乱无章扑克牌(去掉2个王,52张)排成一列展示给观众,然后将牌合起来(背面朝上),左手将牌上半部分(26张)拿起,右手拿下半部分,把两部分牌相隔一张进行交叉洗牌(背面朝上),第一张是左手拿的。

这样反复洗牌4次,最后将牌展示给观众,牌的排列结果是:

♡A,♠A,♦A,♣A,♡2,♠2,♦2,♣2,…,♡K,♠K,♦K,♣K。

试问原来牌的排列的花色和序号是什么?

试用数学方法建立最终的排列结果与最初排列结果之间的关系。

成绩评定单

评语:

 

成绩

任课教师签字年月日

 

摘要

把52张扑克牌看成一维数组,用逆推法推出原来的排列。

设数组a=[1,2,3,4,…,52],对数组进行从新排列。

1,2,3,4分别对应红A,黑A,方A,梅A,依次类推。

设加权函数

数组b和数组c,

得到的非零数组c表示右手拿的部分,

等零的部分放在数组b中表示左手拿的部分,重新合为一维新数组,然后重复四次过程,最后得到原来的排列,依次相对应即可推出原来扑克牌的花色和序号。

关键词:

排列;逆推;加权函数;

目录

论文正文:

1

1.1问题重述1

1.2符号说明及模型假设1

1.2.1符号说明1

1.2.2模型假设1

1.3问题分析及模型建立2

1.3.1问题分析2

1.3.2模型建立2

1.4模型求解3

1.5结果3

1.6优缺点及改进5

1.6.1优缺点5

1.6.2改进方法5

参考文献6

附录7

论文正文:

扑克牌洗牌模型

1.1问题重述

将一副扑克牌(52张)均分成两部分,左手拿上半部分,右手拿下部分,把两部分牌相隔一张进行交叉洗牌(背面朝上),第一张是左手拿的。

这样反复洗牌4次,最后将牌展示给观众,牌的排列结果是:

♡A,♠A,♦A,♣A,♡2,♠2,♦2,♣2,…,♡K,♠K,♦K,♣K。

用数学方法建立最终的排列结果与最初排列结果之间的关系。

这是一个从新排列的问题,把一副扑克牌抽象成一组数,用数学方法,对结果进行分析,然后建立模型求出洗牌前的排列。

1.2符号说明及模型假设

1.2.1符号说明

1.2.2模型假设

为了简化问题,我们可以先忽略花色和排列,就把52张扑克牌看成一维数组,简化成数组之后,我们就可以用数学方法对数组进行计算了。

可以用逆推法推出原来的排列。

设数组a=[1,2,3,4,…,52],用逆推法对数组进行从新排列。

1,2,3,4分别对应红A,黑A,方A,梅A,依次类推。

设加权函数

数组b和数组c,

得到的非零数组c表示右手拿的部分,

等零的部分放在数组b中表示左手拿的部分,重新合为一维新数组,然后重复四次过程,最后得到原来的排列,依次相对应即可推出原来扑克牌的花色和序号。

1.3问题分析及模型建立

1.3.1问题分析

已知经过四次洗牌后得到的结果为♡A,♠A,♦A,♣A,♡2,♠2,♦2,♣2,…,♡K,♠K,♦K,♣K。

要想得到洗牌前排的排列和花色,很显然要用逆推的方法。

按照洗牌规则,逆推出洗牌前的排列和花色。

洗牌规则是:

左手将牌上半部分(26张)拿起,右手拿下半部分,把两部分牌相隔一张进行交叉洗牌(背面朝上),第一张是左手拿的。

我们只要想办法交叉的牌分开,就能逆推出原来的排列和花色。

1.3.2模型建立

我们把52张扑克牌看成一个一维数组,1,2,3,4分别对应红A,黑A,方A,梅A,依次类推。

这样我们就可以用数学方法建立洗牌前后的关系了。

设数组a=[1,2,3,4,…,52],加权函数f(n)=((-1)^n+1)/2。

如果a*f(n)==0,我们就把这些数拿出来放到数组b中;

如果a*f(n)!

=0,我们就把这些数拿出来放到数组c中;

然后把数组b和c重新组成一组新的排列,b中的数在前,c中的数在后;

重复上述过程4次,就可得到最初的排列;

最后按照假设的对应法则还原成扑克牌的排列和花色。

按照上述方法我们就可以编程把洗完后交叉的牌分离开分别放到数组b和c中,然后在组成一个新的一维数组。

在matlab中编程:

k=0;i=26;c=[];b=[];

forn=1:

52

a(n)=n;

ifa(n)*(((-1)^n+1)/2)==0

k=k+1;

b(k)=a(n);

else

i=i+1;

c(i)=a(n);

end

end

k=26;

fori=27:

52

k=k+1;

b(k)=c(i)

end

根据以上程序就可以推出第四次洗牌前的排列和花色,重复四次就可得

到想要的结果。

1.4模型求解

我们假设52张扑克成一组数列,并且1,2,3,4分别对应红A,黑A,方A,梅A,依次类推。

这样就把具体的扑克牌抽象成一组数,然后就可

以用数学方法对数进行计算了。

如果a*f(n)==0,我们就把这些数拿出来放到数组b中;

如果a*f(n)!

=0,我们就把这些数拿出来放到数组c中;

然后把数组b和c重新组成一组新的排列,b中的数在前,c中的数在后;

重复上述过程4次,就可得到最初的排列;

最后按照假设的对应法则还原成扑克牌的排列和花色。

所以通过以上模型在matlab中求得最终结果后,按照我们假设的对应规则,一一对应即可得到最终我们想要的扑克牌的排列和花色。

1.5结果

每次计算得到的数组及对应的花色:

第四次洗牌前:

a=[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52];

对应的扑克牌排列及花色:

♡A,♦A,♡2,♦2,♡3,♦3,♡4,♦4,♡5,♦5,♡6,♦6,♡7,♦7,♡8,♦8,♡9,♦9,♡10,♦10,♡J,♦J,♡Q,♦Q,♡K,♦K,♠A,♣A,♠2,♣2,♠3,♣3,♠4,♣4,♠5,♣5,♠6,♣6,♠7,♣7,♠8,♣8,♠9,♣9,♠10,♣10,♠J,♣J,♠Q,♣Q,♠K,♣K.

第三次洗牌前:

a=[15913172125293337414549261014182226303438424650371115192327313539434751481216202428323640444852];

对应的扑克牌排列及花色:

♡A,♡2,♡3,♡4,♡5,♡6,♡7,♡8,♡9,♡10,♡J,♡Q,♡K,♠A,♠2,♠3,♠4,♠5,♠6,♠7,♠8,♠9,♠10,♠J,♠Q,♠K,♦A,♦2,♦3,♦4,♦5,♦6,♦7,♦8,♦9,♦10,♦J,♦Q,♦K,♣A,♣2,♣3,♣4,♣5,♣6,♣7,♣8,♣9,♣10,♣J,♣Q,♣K.

第二次洗牌前:

a=[19172533414961422303846311192735435181624324048513212937452101826344250715233139474122028364452];

对应的扑克牌排列及花色:

♡A,♡3,♡5,♡7,♡9,♡J,♡K,♠2,♠4,♠6,♠8,♠10,♠Q,♦A,♦3,♦5,♦7,♦9,♦J,♦K,♣2,♣4,♣6,♣8,♣10,♣Q,♡2,♡4,♡6,♡8,♡10,♡Q,♠A,♠3,♠5,♠7,♠9,♠J,♠K,♦2,♦4,♦6,♦8,♦10,♦Q,♣A,♣3,♣5,♣7,♣9,♣J,♣K.

第一次洗牌前:

a=[11733491430461127438244052137218345015314712284492541622383193551163248132945102642723394203652]

对应的扑克牌排列及花色:

♡A,♡5,♡9,♡K,♠4,♠8,♠Q,♦3,♦7,♦J,♣2,♣6,♣10,♡2,♡6,♡10,♠A,♠5,♠9,♠K,♦4,♦8,♦Q,♣3,♣7,♣J,♡3,♡7,♡J,♠2,♠6,♠10,♦A,♦5,♦9,♦K,♣4,♣8,♣Q,♡4,♡8,♡Q,♠3,♠7,♠J,♦2,♦6,♦10,♣A,♣5,♣9,♣K.

1.6优缺点及改进

1.6.1优缺点

把一副扑克牌看成一维数组,计算得到结果后还要一一对应,还原成扑克牌的排列和花色,才能得到最终结果,这样就比较繁琐,最后处理的时候有点麻烦。

但是把扑克牌抽象成一组数,就可以直接用数学方法计算,可以减少计算环节,如果考虑花色的话,编程的时候就会很麻烦,还是简化成一组数方便用数学方法处理,用数组和加权函数,很容

易就可以分开得到所要的结果。

1.6.2改进方法

除了把一副扑克牌抽象成一个数组外,还可以抽象成矩阵,一个一行52列的矩阵。

然后对矩阵进行拆分计算,也能得到最终结果。

 

参考文献

[1]陈日耀.金属切削原理.北京:

机械工业出版社,1985:

33-36

[2]单锋、朱丽梅、田贺。

民国防工业

[3]张钰,王丹,张风和等.一种新的疲劳可靠寿命计算方法.东北大学学报(自然科学版),2000,21

(1):

42-45

 

附录

程序一:

k=0;i=26;c=[];b=[];

forn=1:

52

a(n)=n;

ifa(n)*(((-1)^n+1)/2)==0

k=k+1;

b(k)=a(n);

else

i=i+1;

c(i)=a(n);

end

end

k=26;

fori=27:

52

k=k+1;

b(k)=c(i)

end

程序二

a=[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52];

f(n)=((-1)^n+1)/2;b=[];c=[];k=0;i=26;

forn=1:

52

ifa(n)*f(n)==0

k=k+1;

b(k)=a(n);

else

i=i+1;

c(i)=a(n);

end

end

k=26

fori=27:

52

k=k+1;

b(k)=c(i)

end

程序三:

a=[15913172125293337414549261014182226303438424650371115192327313539434751481216202428323640444852];

f(n)=((-1)^n+1)/2;b=[];c=[];k=0;i=26;

forn=1:

52

ifa(n)*f(n)==0

k=k+1;

b(k)=a(n);

else

i=i+1;

c(i)=a(n);

end

end

k=26

fori=27:

52

k=k+1;

b(k)=c(i)

end

程序四:

a=[19172533414961422303846311192735435181624324048513212937452101826344250715233139474122028364452];

f(n)=((-1)^n+1)/2;b=[];c=[];k=0;i=26;

forn=1:

52

ifa(n)*f(n)==0

k=k+1;

b(k)=a(n);

else

i=i+1;

c(i)=a(n);

end

end

k=26

fori=27:

52

k=k+1;

b(k)=c(i)

end

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1