看到一个扑克牌魔术的题目,觉得挺有意思。
题目网址:http://zhidao.baidu.com/question/407505626.html
这个题目已经有了答案。
但是答案的程序,看起来有些费劲,自己编了编,觉得还不错,于是就写在下面吧。
/*
小明刚学会一个魔术:有 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),放在桌上即可。
呵呵,谁有兴趣,来试试这个次序有错没有。
自我感觉:做而论道的这个程序,好像比网上的程序略微简单一些,变量,肯定是少了不少。
可以到下面的链接去对比一下:
题目网址:http://zhidao.baidu.com/question/407505626.html
完。