参考代码:
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
int main()
{
int N;
char C;
int halrow;
scanf("%d %c",&N,&C);
halrow=sqrt((N+1)/2.0);
//第一行
int first=2*halrow-1;
for(int i=0;i<halrow;i++)
{
for(int j1=0;j1<i;j1++)
{
printf(" ");
}
for(int j2=0;j2<first;j2++)
{
printf("%c",C);
}
/* for(int j1=0;j1<i;j1++)//注意:每一行的末尾没有空格
{
printf(" ");
}*/
printf("\n");
first-=2;
}
first+=4;
for(int i=halrow-2;i>=0;i--)
{
for(int j1=0;j1<i;j1++)
{
printf(" ");
}
for(int j2=0;j2<first;j2++)
{
printf("%c",C);
}
/*for(int j1=0;j1<i;j1++)
{
printf(" ");
}*/
printf("\n");
first+=2;
}
printf("%d",(N-(2*halrow*halrow-1)));
return 0;
}
解题思路:
1.我是根据等差公式求出总和,小于N值,从而算出行数
2.此题需要注意:每一行的末尾没有多余的空格,最开始我一直以为是我等差数列算错了,一直没发现原来关键原因是每一行末尾是没有空格的