只要细心一步步来就可以做出来
#include <stdio.h>
#include <stdlib.h>
int GetL(int num);
int main(){
int num,i,j;
char ch;
scanf("%d %c",&num,&ch);
int l = GetL(num); //上半部分有多高,包括中间的唯一一个。
int fh = 2*l-1; //第一行有几个符号
int count=0; //记录出现了几个符号
for(i=0;i<l;i++){ //打印上半部分,包括中间的一个
for(j=0;j<i;j++){
printf(" ");
}
for(j=0;j<fh-(2*i);j++){
printf("%c",ch);
count++;
}
printf("\n");
}
for(i=l-2;i>=0;i--){
for(j=0;j<i;j++){
printf(" ");
}
for(j=0;j<fh-(2*i);j++){
printf("%c",ch);
count++;
}
printf("\n");
}
printf("%d\n",num-count);
}
int GetL(int num){
int count=2,sum=7;
while(num>sum){
sum = sum+2*(2*count+1);
count++;
}
return count-1;
}