猜牌术

一、问题描述:

 

二、设计思路:

 

三、程序流程图:

 

 

 

四、代码实现:

#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代表空盒,加的是空盒的数量

posted @ 2023-05-02 09:55  软件拓荒人  阅读(37)  评论(0)    收藏  举报