#include<stdio.h>
int main() {
int num;
char c;
scanf("%d %c", &num, &c);
int h = 0;
int sum = 0;
if (num > 6) {
//这里原来的写法是无限次的2的n次幂,越来越大,不再是单纯的*2
//旧写法:for (int i = 1; i < num/2; i = (2 * i + i) * 2 )
//问题出在最末尾的*2上
for (int i = 0; sum * 2 - 1 <= num; i++, h++) {
sum = sum + 2 * i + 1;
}
h = h - 1;
for (int i = 0; i < h; i++) {
for (int j = i; j > 0; j--) {
printf(" ");
}
for (int j = 2 * (h - i) - 1; j > 0; j--) {
printf("%c", c);
}
printf("\n");
}
for (int i = h - 1; i > 0; i--) {
for (int j = i - 1; j > 0; j--) {
printf(" ");
}
for (int j = 2 * (h - i) + 1; j > 0; j--) {
printf("%c", c);
}
printf("\n");
}
printf("%d", num - 2 * h * h + 1);
}
else {
//超级大坑点!!!不可以 printf("*\n"); 因为不一定是*啊啊啊
printf("%c\n", c);
printf("%d", num - 1);
}
}
太坑了!!!
注意点: 1.输入值在1-6时
2.记得输出剩余字符数
3.%c是随意替换的!!! 测试点1 2错误原因就是这个,具体见else(num<=6)的注释
补充,多注意一下数字范围与sqrt的联系,比如求因数可以使用sqrt加速程序运行,降低时间复杂度