思路
- 利用等差变形公式算出最大的层数,继而可以算出最多需要多少个字符
- 先输出上部分,依次输出,利用flag++表示空格数依次增加
- 接着输出下部分,利用flag--表示空格依次减少
- 注意i的变化,每次加减2
- 考虑n<7的情况,不然会出错,大家可以把小于7的判断代码删掉,看看会出现什么情况
- 此代码在PTA上AC
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
char str;
scanf("%d %c",&n,&str);
int len=sqrt((n+1)/2);
int sum=2*len*len-1;
int flag=0;
//上半部分
if(n<7)
{
printf("%c\n%d",str,n-1);
return 0;
}
for(int i=2*len-1;i>0;i-=2)//i的变化,是每次减2
{
//输出空格
for(int l=0;l<flag;l++)
{
printf(" ");
}
flag++;
//输出字符
for(int k=i;k>0;k--)
{
printf("%c",str);
}
printf("\n");
}
//下半部分
flag-=2;//想想为什么要减2
for(int i=3;i<=2*len-1;i+=2)
{
//输出空格
for(int l=0;l<flag;l++)
{
printf(" ");
}
flag--;
//输出字符
for(int k=i;k>0;k--)
{
printf("%c",str);
}
if(i!=2*len-1)
printf("\n");
else{
printf("\n%d",n-sum);
}
}
return 0;
}