魔术师的猜牌术。魔术师利用一副牌中的十三张黑桃,预先将它们排好后迭在一起,牌面朝下。对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们看看。魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这迭牌下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上。第三次数1、2、3,将前两张牌依次放在这迭牌下面,将第三张牌翻过来,正好是黑桃3。这样依次进行将13张牌全翻出来,准确无误。问魔术师手中的牌原始次序是怎样安排的?
**输入格式要求:提示信息:“The original order of cards is:”
**输出格式要求:"%d "
程序运行示例如下:
The original order of cards is:1 8 2 5 10 3 12 11 9 4 7 6 13
#include<stdio.h>
int main()
{
int a[14]={0};
int i,n,j=1;
printf("The original order of cards is:");
for(i=1;i<=13;i++)
{
n=1;
do{
if(j>13) j=1;
if(a[j]) j++;
else{
if(n==i) a[j]=i;
j++;
n++;
}
}while(n<=i);
}
for(i=1;i<=13;i++)
printf("%d ",a[i]);
printf("\n");
}
类型:
转圈圈的题目。
思路:
- 思考一下,找规律
- 第一次给a[0]赋值,第二次a[1]不赋值,给a[2]赋值
- +0+1+2+3…
- 把每一个初始化为零,把已知的按顺序赋值。
- 数组从零开始计数,本题为了方便思考,所以去掉了a[0]
注意:
a[13]在全局变量时会自动初始化
主要就是这个
1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4
1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5