⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 魔术师翻牌.txt

📁 爱因斯坦的思考题 二叉树算法集 分解质因数新解 石子归并问题等有趣的C程序
💻 TXT
字号:
*魔术师翻牌,魔术师将扑克中的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 2
void 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 
 } 
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -