首页 > 其他分享 >猜牌数

猜牌数

时间:2023-05-09 13:56:03浏览次数:33  
标签:13 盒子 空盒子 计数 黑桃 猜牌 放入

一、问题描述

魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这迭牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3,这样依次进行,将13张牌全部翻出来,准确无误。问魔术师手中的牌原始次序是怎样安排的?

二、问题分析
  假设桌子上有13个空盒子排成一圈,设定其中一个盒子序号为1,将黑桃A放入1号盒子中,接着从下一个空盒子开始重新计数,当数到第2个空盒子时,将黑桃2放入其中。然后再从下一个空盒子开始重新计数,数到第3个空盒子时,将黑桃3放入其中,这样依次进行下去,直到将13张牌全部放入空盒子中为止。需要注意的是,在计数过程中要跳过那些已放入牌的盒子,而只对空盒子计数。最后牌在盒子中的顺序,就是魔术师手中牌的顺序。

三、程序流程图

 

四、代码实现

复制代码
#include<stdio.h>
int a[14];
int main()
{
int i,n,j=1; /*j:数组(盒子)下标,初始时为1号元素*/
printf("The original order of cards is:");
for(i=1;i<=13;i++) /*i:要放入盒子中的牌的序号*/
{
n=1;
do{
if(j>13)
    j=1; /*由于盒子构成一个圈,j超过最后一个元素则指向1号元素*/
if(a[j])
j++; /*跳过非空的盒子,不进行计数*/
else
{
    if(n==i)
    a[j]=i; /*若数到第i个空盒子,则将牌放入空盒中*/
j++;
n++; /*对空盒计数,数组下标指向下一个盒子*/
}
}while(n<=i); /*控制空盒计数为i*/
}
for(i=1;i<=13;i++) /*输出牌的排列顺序*/
printf("%d ",a[i]);
printf("\n");
}

 

标签:13,盒子,空盒子,计数,黑桃,猜牌,放入
From: https://www.cnblogs.com/tianpeisen/p/17384643.html

相关文章

  • 猜牌数
    一、问题描述魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第......
  • 猜牌术
    一、问题描述: 二、设计思路: 三、程序流程图:   四、代码实现:#include<stdio.h>inta[14]={0};intmain(){inti,j=1,n;printf("魔术师手中的牌原始次序是:\n");for(i=1;i<=13;i++){n=1;/*每次都从第一个空盒开始重新计......
  • 猜牌数
    一、问题描述魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第......
  • 猜牌术
    魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第......
  • 猜牌术
    一问题描述魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二......
  • day 18 猜牌
      1.申明一个计数数组a与一个判断数组t;2.进行13次循环;3.当满足条件时,对a的一个元素赋值,并更改t;4.输出a;  #include<iostream>usingnamespacestd;intj=1; intmain(){ inta[14],flag[14]={0}; printf("牌的排列为:\n"); for(inti=1;i<14;i++){  f......
  • 猜牌数
    自然语言解决问题:假设桌子上有13个空盒子排成一圈,设定其中一个盒子序号为1,将黑桃A放入1号盒子中,接着从下一个空盒子开始重新计数,当数到第2个空盒子时,将黑桃2放入其中。然后再从下一个空盒子开始重新计数,数到第3个空盒子时,将黑桃放入其中,这样依次进行下去,直到将13......