好玩
/*
* 2*n-1=len; 等差数列求和公式 n*(1+n)/2
* 2*3-1=5 所以 n*(1+len)/2 = n*n; 2*n*n-1 = 沙漏总个数;
* 2*2-1=3 所以 len = 2*n-1; len 是第一行要输出的个数
* 2*1-1=1
* 2*2-1=3
* 2*3-1=5
* 2*n-1=len;
*/
#include <stdio.h>
char c;
int len; /* 沙漏第一行要输出多少个 */
int remain; /* 剩了多少个 */
/*------------------------ 计算图形,并合理的在数组中分布 ---------------------*/
int cal_len ()
{
int N, i;
scanf ("%d %c", &N, &c);
for (i = 1; i*i <= ((N+1)/2); ++i);
--i;
len = 2*i-1;
remain = N - (2*i*i - 1);
return 0;
}
/*---------------------------- 输出结果 --------------------------------------*/
int print_result ()
{
// printf("len = %d remain = %d\n", len, remain);
int i, j, k, m;
k = 0; /* 每一行开始打印几个空格 */
for (i = len; i > 1; i -= 2) /* 一行一行打印,每一行比前一行少两个 */
{
m = k;
for (j = i; j > 0; --j)
{
for (; m > 0; --m)/* 打印每行开始的空格 */
printf(" ");
putchar(c);
}
++k;
printf("\n");
}
for (i = 1; i <= len; i += 2)
{
m = k;
for (j = i; j > 0; --j)
{
for (; m > 0; --m)
printf(" ");
putchar(c);
}
--k;
printf("\n");
}
printf("%d", remain);
return 0;
}
int main ()
{
cal_len ();
print_result ();
return 0;
}