将数字分组为4的倍数

时间:2014-02-01 02:40:12

标签: c++ shuffle

我刚刚在高中开始compsci,我正在尝试制作纸牌游戏。

我的老师希望我们创建一个随机播放和处理卡片的功能(用户可以输入他们想要使用多少套牌)。我花了几个小时思考如何做到这一点,并提出了一些想法。我想用int值表示每张卡,然后根据该值分配卡值。要做到这一点,我基本上只想将数字除以模4,得到1-4值(套装值)。

问题是,我不知道如何分配卡值(Ace,Two,Three ......等)我认为最好的方法是将所有内容按4的倍数进行分组。已经思考了很长时间,仍然没有想出办法来实现这一目标。任何想法都会有很大帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

获取套装的数字mod 4(给出0到3之间的数字)。 取值除以4的数字(给出一个从0到12的数字,你可以加1到1,以便得到1到13之间的值)。 请记住,整数除法将返回数学上精确答案的“下限”。

对于多个套牌,你首先除以4,然后取出那个mod 13(然后根据需要加1)。

常见的混洗算法(在C中):

void shuffle_deck(int *deck) {
    for (int i = DECKSIZE - 1; i > 1 ; --i) {
        int r = rand() % (i + 1);   
        int t = deck[r];  
        deck[r] = deck[i];
        deck[i] = t;
    }
}