[blockquote2 name='签名']
魔术师的猜牌术。魔术师利用一副牌中的十三张黑桃,预先将它们排好后迭在一起,牌面朝下。对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们看看。魔术师将最上面的那张牌数为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 * 10 * 12 11 * * 7 6 13
(部分数值用*代替)
[/blockquote2]
# includeint main(void) { int k[14] = { 0 }; int a, b, c, m, n, p = 1;; b = 1; //1 02 003 0004 1 3 6 10 c = 1; // 1 2 3 4 5 6 for (a = 1; a <= 13; a++) { k[b] = c; c += 1; //7 for (n = 1;n <= c && c < 14;n++) { //12 b++; if (b > 13) { b = b - 13; } if (k[b]) { n--; } //printf("%d\n", n); } } for (a = 1; a <= 13; a++) { printf("%d", k[a]); } };
#includeint a[14]; int main() { int i, j=1, n; printf("魔术师手中的牌原始次序是:\n"); 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"); return 0; }