C语言编程:扑克牌魔术

看到一个扑克牌魔术的题目,觉得挺有意思。

题目网址: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

完。

    原文作者:魔术师发牌问题
    原文地址: https://blog.csdn.net/baidu_33836580/article/details/50578898
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞