L1-002 打印沙漏 (20 分)
https://pintia.cn/problem-sets/994805046380707840/problems/994805145370476544)
收获
- 写for循环,要考虑清楚两种哪一种会更好
- 要么从0开始++到n
- 或者从n开始–到0
- 特别是嵌套循环,第二层循环可能要用第一层循环的参数
//头文件:#include <math.h>
//sqrt() 用来求给定值的平方根,其原型为:
//double sqrt(double x);
#include<iostream>
using namespace std;
#include<cmath>
int main()
{
int N;
char c;
cin >> N >> c;
//n是最多几行,利用等差数列的求和公式算
int n = sqrt((N+1)/2);
//max是最大项
int max = 2 * n-1 ;
//max有可能是偶数,不行
if (max % 2 == 0) {
max -= 1;
n -= 1;
}
//嵌套循环循环意义:第二层循环应用第一层的参数
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i-1; j++) {
cout << ' ';
}
for (int m = max - (i - 1) * 2; m > 0; m--) {
cout << c;
}
cout << endl;
}
for (int i = 2; i <= n; i++) {
for (int j = n-i; j > 0; j--) {
cout << ' ';
}
for (int m = max; m >= max - (i - 1) * 2;m--) {
cout << c;
}
cout << endl;
}
cout << N - (2 * n * n - 1);
return 0;
}