扑克牌问题(C语言)

小明刚学会一个魔术:有13张扑克牌,A,1,2,3,4,5,6,7,8,9,10,J,Q,K扑克牌先按他预先设计的方法排序,只见他从下边拿出一张放到最上面,又从最下边拿出... 小明刚学会一个魔术:有13张扑克牌,A,1,2,3,4,5,6,7,8,9,10,J,Q,K
扑克牌先按他预先设计的方法排序,只见他从下边拿出一张放到最上面,又从最下边拿出一张放到桌上是A,然后又从下边拿出一张放到最上面,又从最下边拿出一张放到桌上是2 ……依此类推,直到手里只有一张牌,翻开放到桌上正好为K。
求一开始小明手中扑克牌的顺序。。。要C语言程序哦!先谢谢了~~~
展开
 我来答
百度网友5f203ea
2012-04-13 · 超过23用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:52.5万
展开全部
其实这是典型的利用链表求解的问题,但是此题用链表的话还需要应用一个长度为13的数组做辅助,所以我直接用数组来进行演示,将在手中的牌进行标记,将放到桌子上的牌进行赋值。
我在很小的时候我的姥爷就曾给我表演过这个魔术,当时我自己用扑克牌弄了将近两个小时才终于知道了这13张牌的顺序是什么,有兴趣的话你可以自己试一试,很有意思。
下面的代码你可以进行调试来帮助理解整个过程
#include <stdio.h>
void main()
{
int poker[13];//十三张扑克牌
for(int i = 0;i<13;i++)//初始化
poker[i] = 0;//0代表牌还在手中,不为0代表放到了桌子上
int remain = 13;//手中剩余的扑克数
int j = 12;//从最下边开始抽牌
int order = 1;//当order为2时,将此时的牌放到桌子上
int number = 1;//从A开始
while(remain != 0)
{
if(j == -1)
{
j = 12;//返回最后一张牌
continue;
}
if(poker[j] != 0)//如果牌已不在手中,则到下一张牌
{
j--;
continue;
}
if(order == 2)
{
poker[j]= number++;//将扑克赋值
remain--;//手中剩余的牌数减1
order = 1;
continue;
}
order++;
j--;
}
//输出一开始小明手中扑克牌的顺序
for(i = 0; i < 13;i++)
printf("%d ",poker[i]);
}
想要写出一个程序重点在于理解这个过程,只有对这个过程熟悉了才有可能把它用代码来演示出来。
做而论道
高能答主

2012-04-25 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
/*
小明刚学会一个魔术:有 13 张扑克牌,A,2,3,4,5,6,7,8,9,10,J,Q,K;
他先把扑克牌按他预先设计的方法排序;
只见他从下边拿出一张放到最上面,又从最下边拿出一张放到桌上是A;
然后又从下边拿出一张放到最上面,又从最下边拿出一张放到桌上是2;
……
依此类推,直到手里只有一张牌,翻开放到桌上正好为K。
求一开始小明手中扑克牌的顺序,要求用C语言编程。
*/
//其实,编写这个小程序,用不着链表,也不用熟悉游戏的过程,
//只要把顺序放在桌子上的扑克牌,按照前面所说的次序,反着次序收到手上即可。
//程序如下:

#include <stdio.h>
void main()
{
int on_t[13] = {13,12,11,10,9,8,7,6,5,4,3,2,1};//在桌上先摆好扑克牌.
int in_h[13] = {0}; //手上有十三张“空的”扑克牌.
int i, j;
for(i = 0; i < 13; i++) { //把桌上的逐张收到手上来.
for(j = i + 1; j >= 0; j--) in_h[j + 1] = in_h[j]; //先把手上的下移,腾出最上面的空.
in_h[0] = on_t[i]; //从桌子上拿一张,放到手上的最上面.
for(j = i + 1; j >= 0; j--) in_h[j + 1] = in_h[j]; //再把手上的下移,腾出最上面的空.
in_h[0] = in_h[i + 1]; //再把手上最下面的,移到最上面.
}
for(i = 0; i < 13; i++) printf("%d ", in_h[12 - i]);//输出.
}

程序执行后,显示出如下的数字序列:
10 6 13 5 9 4 11 3 8 2 12 1 7

左边的 10,是最上边的,最右边的 7,是最下边的。

游戏的时候,从最下面拿出 7 放在 10 的上面,再从下面拿出 1(A),放在桌子上;
然后再把下面的 12(Q) 放在最上面的 7 的上面,再从下面拿出 2,放在桌子上;
……
最后,手上最后的应该是 13(K),放在桌上即可。
呵呵,谁有兴趣,来试试这个次序有错没有。

做而论道的这个程序,好像比上边程序略微简单一些,变量,肯定是少了不少。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式