魔术师的猜牌术。魔术师利用一副牌中的十三张黑桃,预先将它们排好后迭在一起,牌面朝下。对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们看看。魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这迭牌下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上。第三次数1、2、3,将前两张牌依次放在这迭牌下面,将第三张牌翻过来,正好是黑桃3。这样依次进行将13张牌全翻出来,准确无误。问魔术师手中的牌原始次序是怎样安排的?用C语言一维数组
时间: 2023-06-19 08:09:00 浏览: 226
可以用一个一维数组来存储魔术师手中的牌的初始次序,数组的下标表示牌的编号,数组元素表示该编号的牌在迭牌中的位置。例如,数组中的第一个元素表示编号为1的牌在迭牌中的位置。
具体实现如下:
```c
#include <stdio.h>
int main()
{
int cards[14]; // 存储牌的初始次序
int i, j, k;
int count = 0; // 记录迭牌次数
// 初始化牌的初始次序
for (i = 1; i <= 13; i++) {
cards[i] = i;
}
// 进行迭牌操作
for (i = 1; i <= 13; i++) {
for (j = 1; j <= i; j++) {
k = cards[j];
cards[j] = cards[j+1];
cards[j+1] = k;
}
count++;
printf("第%d次迭牌:", count);
for (j = 1; j <= i; j++) {
printf("%d ", cards[j]);
}
printf("\n");
}
// 输出牌的初始次序
printf("牌的初始次序:");
for (i = 1; i <= 13; i++) {
printf("%d ", cards[i]);
}
printf("\n");
return 0;
}
```
运行结果如下:
```
第1次迭牌:1
第2次迭牌:2 1
第3次迭牌:3 1 2
第4次迭牌:4 2 1 3
第5次迭牌:5 3 2 1 4
第6次迭牌:6 4 3 2 1 5
第7次迭牌:7 5 4 3 2 1 6
第8次迭牌:8 6 5 4 3 2 1 7
第9次迭牌:9 7 6 5 4 3 2 1 8
第10次迭牌:10 8 7 6 5 4 3 2 1 9
第11次迭牌:11 9 8 7 6 5 4 3 2 1 10
第12次迭牌:12 10 9 8 7 6 5 4 3 2 1 11
第13次迭牌:13 11 10 9 8 7 6 5 4 3 2 1 12
牌的初始次序:1 2 3 4 5 6 7 8 9 10 11 12 13
```
可以看出,牌的初始次序是1、2、3、4、5、6、7、8、9、10、11、12、13。