自己用C做了一套解答程序,但是一直通不过测试点0,等过会再来看看;
// PTA团体L1-002
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void star_up(int n);
void star_down(int n);
int main(void)
{
int i=1,item=0;
int N,left,n;
char ch;
double sum=1.0;
scanf("%d %c", &N,&ch);
if (N <= 0)
printf("\n");
else if (N <= 6) {
putchar(ch);
printf("\n");
}
else {
while (N >= sum) {
item = 2 * (2 * i + 1);
sum = sum + item;
i++;
}
sum = sum - 2 * (2 * (i - 1) + 1);
n = (i - 2) * 2 + 1;
star_up(n);
star_down(n);
}
left = N - sum;
printf("%d\n", left);
return 0;
}
void star_up(int n) {
int i,item,j,k;
n = (n - 1) / 2;
for (i = n; i >= 0; i--) {
for (j = 1; j <= n - i; j++)
printf(" ");
item = 2 * i + 1;
for (k = 1; k <= item; k++)
printf("*");
printf("\n");
}
}
void star_down(int n) {
int i,j,item,k;
n = (n - 1) / 2;
for (i = 1; i <= n; i++) {
for (j = 1; j <= n - i; j++)
printf(" ");
item = 2 * i + 1;
for (k = 1; k <= item; k++)
printf("*");
printf("\n");
}
}
下面是网上的一位大佬做的,仅供以后学习参考:
#include<stdio.h>
#include<math.h>
void print(char ch, int count) {
while (count-- > 0)putchar(ch);
} //print(ch,c):打印ch字符c遍。
int main() {
int n, ch, h,i;
scanf("%d %c", &n, &ch);
h = (int)sqrt((n + 1) / 2); //h=g(n)
for (i = 1-h; i < h; i++){
int j = abs(i);
print(' ', h - 1 - j); //空格
print(ch, 2 * j + 1); //ch
putchar('\n'); //换行
}
printf("%d", n - (2 * h*h - 1));
return 0;
}