魔术2

魔术师再次表演,他将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:最上面一张是黑桃A,翻开后放在桌上。以后,从上至下每数两张全依次放在最底下,第三张给观众看,便是黑桃2,放在桌上后再数两张依次放在最底下,第三张给观众看,是黑桃3。如此下去,观众看到放在桌子上牌的顺序是:
黑桃 A 2 3 4 5 6 7 8 9 10 J Q K
红桃 A 2 3 4 5 6 7 8 9 10 J Q K
问魔术师手中牌的原始顺序是什么?


*问题分析与算法设计
本题可在上题的基础上进行编程,不同的在于计数的方法和牌的张数,这些并不影响我们求解题目的思路,仍可按照倒推的方法,得到原来魔术师手中的牌的顺序。
#include <stdio.h>

int a[27];

int main()
{
    int i, n, j = 1;
    a[1] = 1; 
    printf("The original order of cards is:(r:rad b:block):\n");
    for (i = 2; i <= 26; i++)
    {
        n = 1;
        do{ 
              if(j > 26)
                  j = 1;
              if(a[j])
                  j++; 
              else
              {
                  if(3 == n) 
                      a[j] = i;
                      j++; 
                      n++; 
              }
           }while(n <= 3); 
    }
    for (i = 1; i <= 26; i++) 
    {
        printf("%c",a[i] > 13 ? 'r': 'b');
        printf("%d ",a[i] > 13 ? a[i] - 13 : a[i]);
    }
    printf("\n");

    return 0;
}

The original order of cards is:(r:rad b:black):
b1 r6 b10 b2 r12 r3 b3 b11 r9 b4 r7 b12 b5
r4 r13 b6 b13 r11 b7 r5 r1 b8 r8 r10 b9 r2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值