正文

一个实用的小程序--魔术师翻牌2005-12-05 17:29:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goal00001111/7866.html

分享到:

/*魔术师翻牌,魔术师将扑克中的13张黑桃预先排好,牌面朝下,放在手中,第一次数一张牌翻过来刚刚好是A,放在桌面上;第二次数MAX>1张牌,把记数分别为1,2,。。。,(MAX-1)的那些牌,依次 放在手中牌的下面,数MAX的牌,翻过来刚刚好是2,放在桌面上;第三次也数MAX>1张牌,把记数分别为1,2,。。。,(MAX-1)的那些牌,依次 放在手中牌的下面,数MAX的牌,翻过来刚刚好是3,放在桌面上;这样做下去,直到13张牌翻完为止,此时桌面上的牌顺序刚刚好是A,2,3,4,5,6,7,8,9,10,J,Q,K。请编程找出魔术师手中的13张牌的原始顺序...    */#include <stdio.h>#include <stdlib.h> #define MAX 2void Solve(int *Puke, int len); //此函数用来找出魔术师手中的13张牌的原始顺序 void show(int Puke[], int len); //此函数用来演示魔术师的翻牌顺序 int main(void){  int side, Puke[13]={0}, *P_Puke=Puke;//用来存储13张牌  Solve(P_Puke, 13);//此函数用来找出魔术师手中的13张牌的原始顺序   printf("原始顺序 : ");  for(side=0; side<13; side++)//输出13张牌的原始顺序   printf("%d ",Puke[side]);  printf("\n翻牌顺序 : ");  show(Puke, 13);//此函数用来演示魔术师的翻牌顺序   system("pause");    return 0;} void Solve(int *Puke, int len)//此函数用来找出魔术师手中的13张牌的原始顺序 { int count=MAX, side=0; //分别表示计数器和下标    int number; //牌的号码                   for(number=1; number<=13; count = 1, number++)   {  while(count < MAX)//如果没到该数的数目,继续往下数   {   if(Puke[side%13] == 0)//如果该牌未拿出,依次数过去     count++;   side++; //不管该牌是否被拿出,下标都加1   }  while(Puke[side%13] != 0) //跳过已经拿出来的牌    side++;  Puke[side%13] = number;//此时side%13所对应的数组元素就是那张牌  } } void show(int Puke[], int len) //此函数用来演示魔术师的翻牌顺序 { int count=MAX, side=0; //分别表示计数器和下标    int number; //牌的号码                        for(number=1; number<=len; count = 1, number++)   {  while(count < MAX)//如果没到该数的数目,继续往下数   {   if(Puke[side%len] != 0)//如果该牌未拿出,依次数过去     count++;   side++; //不管该牌是否被拿出,下标都加1   }  while(Puke[side%len] == 0) //跳过已经拿出来的牌    side++;  printf("%d ",Puke[side%len]);//此时side%len所对应的数组元素就是那张牌   Puke[side%len] = 0 ;   //把拿出来的牌做个记号,取值为0  } }

阅读(3406) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册