L1-002 打印沙漏

思路:

1:首先确定打印的沙漏的行数。根据输入的符号数量N确定符合题意的最大的沙漏形状。沙漏形状可以视为两个颠倒重合的三角形,根据等差数列求和可知对行数为n的两个颠倒重合的三角形,符号个数为2 * n * n-1,设n初值为1,将该公式作为判断条件使用while循环,找到第一个使符号个数大于N的n,然后让n--便得到符合题意的n,计算剩余没用的符号数x,然后根据n计算沙漏行数。

2:逐行输出沙漏图形。沙漏的第一行没有空格,此后的每一行输出的空格数逐次+1。每行输出的符号数等于沙漏的行数(n)减去输出的空格数。当输出的符号数为1的时候,从那一行往后的行输出的空格数逐次-1。

3:输出剩余没用的符号数x。

#include<stdio.h>
int main()
{
    int i,j,k,n,N,x,w=0;
    char c;
    scanf("%d %c",&N,&c);
    n=0;
    //寻找第一个使符号个数大于N的n
    while((2*n*n-1)<=N)
        n++;
    n--;
    //计算剩余没用的符号数x
    x=N-2*n*n+1;
    //计算沙漏行数
    n=n*2-1;
    //逐行输出沙漏图形
    for(i=0,k=0;i<n;i++)
    {
        //输出空格
        for(j=0;j<k;j++)
            printf(" ");
        //输出符号
        for(j=0;j<(n-2*k);j++)
            printf("%c", c);
        printf("\n");
        //判断输出符号数是否为1
        if((n-2*k)==1)
            w=1;
        //如果没有到输出1个符号的那行每行输出空格数逐次+1,否则-1
        if(w==0)
            k++;
        else
            k--;
    }
    //输出剩余没用的符号数x
    printf("%d",x);
    return 0;
}
全部评论

相关推荐

收到了小米的实习offer,犹豫是否要去。。。
认真搞学习:雷总还当过首富呢,公司不算大厂算独角兽吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-13 19:30
化身华黑&nbsp;今天询问对接人审批情况,结果被告知没HC了&nbsp;云计算&nbsp;
苦闷的柠檬精allin实习:主管面结束后hr每周保温一次,结果前几天和我说没hc了,我也化身华黑子了
点赞 评论 收藏
分享
有担当的灰太狼又在摸鱼:零帧起手查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务