智星论坛(IQSTAR BBS)
 
打印

朴克牌游戏

那当然啦

TOP

今天在 百度知道 里也有人问起同样的问题,所以晚上在去外面吃回锅肉饭的时间想了想,用C语言的数组就很容易的搞定!!!
我的百度回答:http://zhidao.baidu.com/question/51621358.html

思路:
从简单到复杂:
假设原来的牌在顺序是1 2 3 4 5 记作A排列
那么发完牌后的顺序是1 3 5 4 2 记作B排列

现在是要发完牌后的顺序是 1 2 3 4 5 记作C排列
首先我们要想,如果如果B排列中3是2,5是3,2是5,那么是不是最后发完牌的顺序就是1 2 3 4 5 了,所以原来的排列就是1 5 2 4 3

有了上面的想法后,就很简单了,对于13个牌的情况,把顺序为1 2 ...13的牌发完后的顺序1 3 5 7 9 11 13 4 8 12 6 2 10 和 1 2 3 ... 13 做一个变换就可以了

C语言代码如下:

#include "stdio.h"
#define LEN 13//设置扑克牌数量
int main()
{
    int i,arr[LEN];
    int arrS[LEN];//★★保存转换后的数据
    for (i=0;i<LEN;i++)//初始化数组元素1,2,...,LEN
     arr = i+1;
    for (i=0;i<LEN;i++)
  
  {
        //printf("%d ",arr);//输出当前数
        arrS[arr-1] = i+1;//★★★★★进行转换,这里是重点!!!
        int temp;
        if (i < LEN-1)
            temp = arr[i+1];//保存第二个数
        else
            temp = arr;
        for (int j=i+2;j<LEN;j++)//从第三个至尾数向前移一位
        {
            arr[j-1] = arr[j];
        }
        arr[LEN-1] = temp;//第二个数沉底
    }
    printf("扑克牌原排序:");
    for (i=0;i<LEN;i++)
        printf("%d ",arrS);//★★输出原排序
    return 0;
}

运行效果:
扑克牌原排序:1 12 2 8 3 11 4 9 5 13 6 10 7 请按任意键继续. . .

对于52张牌的情况:修改
#define LEN 54//设置扑克牌数量
扑克牌原排序:1 28 2 48 3 29 4 42 5 30 6 53 7 31 8 43 9 32 10 49 11 33 12 44 13 34 14 52 15 35 16 45 17 36 18 50 19 37 20 46 21 38 22 54 23 39 24 47 25 40 26 5127 41 请按任意键继续. . .





[ 本帖最后由 kofeffect 于 2008-4-20 21:32 编辑 ]
悲欢离合红尘浪,生死轮回六道殇
水月人生皆幻丧,繁华弹指尽空茫。


PS:好好学习,天天向上,学习雷锋好榜样;
         忠于革命忠于党,为人民服务,劳动最光荣!

TOP


这个一点都不会

出这道题的意思就是想说明一下,思维方式很重要

[ 本帖最后由 383717846 于 2008-4-25 15:29 编辑 ]

TOP

当前时区 GMT+8, 现在时间是 2008-9-7 03:19

Processed in 0.084791 second(s), 8 queries, Gzip enabled.


Skin By Wing