一、问题描述:
二、设计思路:
三、程序流程图:
四、代码实现:
#include<stdio.h> int a[14] = {0}; 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)/*判断盒子是否为第i个空盒*/ a[j]=i;/*如果是则将i存入*/ j++; n++; } } while(n<=i); } for( i=1; i<=13; i++ ) printf("%d ", a[i]); printf("\n"); return 0; }
说实话,这个题难度不小,因为要求很多,我做的时候不知道怎么用算法表示,还是不够,搜了一下就恍然大悟,我追求循环的步长,发现规律为1,3,6,10......根本就没有规律,导致我做不出来,循环开始处把n的值赋为0,重新计算,n代表空盒,加的是空盒的数量
标签:盒子,int,++,循环,猜牌术,空盒 From: https://www.cnblogs.com/bzsc/p/17367383.html