魔术2

来源:互联网 发布:22lr子弹淘宝 编辑:程序博客网 时间:2024/05/15 03:25
魔术师再次表演,他将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:最上面一张是黑桃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
原创粉丝点击