打印沙漏 (20分)
总结:
- 画图理解:沙漏分为上下两个三角。整个沙漏2*M-1行,总数2M^2-1。(正三角:第i行的数量为2i-1。M行的三角总数为M^2;倒三角类似。)
- 直接用公式求M,用sqrt函数求平方根,使用强制类型转换或者floor函数向下取整。(头文件:#include <cmath>)
- (尽可能多的使用,即M取尽可能大。)或者N<=1000, 直接for循环0→N挨个尝试,取最大的满足条件的M。
代码:
#include <cstdio>
#include <cmath>
int main(){
int n, m;
char c;
scanf("%d %c", &n, &c);
m = (int)sqrt( double(n+1)/2.0 ); //三角m行 倒三角m行 沙漏2m-1行 总数2m^2-1
for(int i=m; i>0; i--){
for(int j=0; j<m-i; j++) // [(2m-1) -(2i-1)]/2个空格
printf(" ");
for(int k=0; k<2*i-1; k++)
printf("%c",c);
printf("\n");
}
for(int i=2; i<=m; i++){
for(int j=0; j<m-i; j++)
printf(" ");
for(int k=0; k<2*i-1; k++)
printf("%c",c);
printf("\n");
}
printf("%d", n-(2*m*m-1) );
return 0;
}