倒三角输出1,2,3,4,5

1       2        3        4        5  

12     23      34      45   

123   234    345

1234 2345

12345

上次课老师留了一个作业:将12345按上面这种方式在屏幕上输出。

这个看似简单的内容,我这种菜鸡花了好几个小时才完成,下面是我的代码:

int fun(int i,int j)
{
    int flag,fl=5;//f1控制递归时输出的段数
    if(i>1)
        fun(i-1,j);
    while(j>0&&j<6&&fl>=i)
    {

        for(flag=0;flag<i;flag++)//控制每次输出的数的个数,最深层递归时,每个数段只输出一个数,依次类推
                printf("%d",j++);
                fl--;
        for(flag=5;flag>i;flag--)//控制每个数输出之后的空格数
            printf(" ");
            for(flag = 1;flag<i;flag++)//该循环保证while循环正常,即每次while循环时j的值在一个循环内部多次改变
                j--;//而在每个while循环间只加一
    }
    printf("\n");//完成一次递归进行换行
    return 0;
}
int main()
{
    int i = 5,j = 1;
    fun(i,j);
}

我自己是用递归写出来的,很麻烦,变量比较多,而且各个变量之间并不是简单的没有联系,而是相互制约相互影响

今天老师用循环写出来,一目了然

int main()
{
    int n = 5;
    int s,i,j,k;
    for(s = 1;s<=n;s++)
    {
        for(i = 1;i<=n-s+1;i++)//控制输出字符段个数
        {
            j = i+s-1;//字符数与段数关系
            for(k = i;k<=j;k++)//控制每段字符数
            {
                    printf("%d",k);

            }
            for(k = n;k>s;k--)
                    printf(" ");
        }
        printf("\n");
    }
}

姜还是老的辣

把行数s表示,每行输出的数段数用i控制其循环,每个数段输出的数的个数用k来控制其循环

由于输出空格的循环和数段是并行的循环,因此也用k来控制其循环,

第一层循环时,s = 1,n - s + 1 = 5,j = i + s - 1;此时i <= n-s+1;n-s+1表示数段个数,第一层循环时为5,即第一行输出

5个数段,;j表示每个数段中数的个数,第一层为1,然后就是空格数,每行依次递减

下面是运行结果




猜你喜欢

转载自blog.csdn.net/mr_h9527/article/details/80071859