控制输入输出题目,自己写的有点复杂,主要是算来算去算的心累;
思路:
先根据给出的n
计算出能打印的最高沙漏需要多少字符,求出多余的,然后找规律分别控制上,中(中间一行),下
部分的输出;
代码如下,提交使用g++
#include
using namespace std;
int main()
{
int n, tmp=0, sum=1, row=0, duoyu=0, i=1; //duoyu就是多余的意思
char c;
cin >> n >> c;
while(i++)
{
tmp = 2*(2*i-1);
if(sum+tmp<=n)
{
sum += tmp;
row += 2;
}
else
break;
}
if(n)
row++;
duoyu = n - sum;
int top = row/2;
int blank = 0;
for(; top>0; top--) //上
{
for(int j=0; j<blank; j++)
printf(" ");
for(int k=1; k<=(2*(top+1)-1); k++)
printf("%c", c);
blank++;
printf("\n");
}
for(int j=1; j<=blank; j++) //中
printf(" ");
printf("%c\n", c);
blank--; //下
top = row/2;
for(int l=1; l<=top; l++)
{
for(int j=0; j<blank; j++)
printf(" ");
for(int k=1; k<=(2*l+1); k++)
printf("%c", c);
blank--;
printf("\n");
}
printf("%d", duoyu);
return 0;
}