您的位置:首页 > 其它

L1-002. 打印沙漏

2018-04-01 16:22 169 查看
题目连接https://www.patest.cn/contests/gplt/L1-002

本题是一道需要从基本机构开始写的,先实现一半的输出,后完成下一半的输出即可。

1:先输出上一半(for循环实现):

for(i=0; i<N; i++)
{
for(j=i; j>0; j--)
printf(" ");
for(j=0; j<2*N-1-2*i; j++)
printf("%c",a);
printf("\n");
}


2:实现下一半的输出:

for(i=N; i>0; i--)
{
for(j=i-1; j>0; j--)
printf(" ");
for(j=0; j<2*N+1-2*i; j++)
printf("%c",a);
printf("\n");
}


3:上下拼接:

for(i=0; i<N; i++)
{
for(j=i; j>0; j--)
printf(" ");
for(j=0; j<2*N-1-2*i; j++)
printf("%c",a);
printf("\n");
}
for(i=N-1; i>0; i--)///中间重复,故i=N-1消去中间重复部分;
{
for(j=i-1; j>0; j--)
printf(" ");
for(j=0; j<2*N+1-2*i; j++)
printf("%c",a);
printf("\n");
}


完整代码:

#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,N,t=0;///每输出一次a,t++,用来记录输出次数;
char a;
scanf("%d %c",&n,&a);
N=sqrt((n+1)/2);
for(i=0; i<N; i++)
{
for(j=i; j>0; j--)
printf(" ");
for(j=0; j<2*N-1-2*i; j++)
printf("%c",a),t++;
printf("\n");
}
for(i=N-1; i>0; i--)
{
for(j=i-1; j>0; j--)
printf(" ");
for(j=0; j<2*N+1-2*i; j++)
printf("%c",a),t++;
printf("\n");
}
printf("%d\n",n-t);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: