算出行数后直接分上下两部分控制打印
注意右侧不用打印空格,否则格式错误。
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
/*
Created by HarvestWu on 2018/04/27.
*/
using namespace std;
int main()
{
int N,count,an;
char c;
scanf("%d %c", &N, &c);
count = (int)sqrt(((double)N+1)/2);//一个完整三角形的行数
an = 2 * count - 1;//最后一行的个数
int left = 0, right = an;
for (int i = 0; i < count; i++)
{
for (int j = 0; j < left; j++)
printf(" ");
for (int m = left; m < right; m++)
printf("%c", c);
left += 1;
right -= 1;
printf("\n");
}
left -= 1;
right += 1;
for (int i = 1; i < count; i++)
{
left -= 1;
right += 1;
for (int j = 0; j < left; j++)
printf(" ");
for (int m = left; m < right; m++)
printf("%c", c);
printf("\n");
}
printf("%d\n", N-2*count*count+1);
return 0;
}