题目
打印沙漏
题目链接
题解
不 难 不 难,主要在于循环结束后每个变量值是多少!是不是多加了一轮或者是多算了一行
变量名 | 含义 |
---|---|
sum | 当前使用了的字符的总个数 |
now | 当前行的字符个数 |
ind | 当前是在第几行 |
string str[101] | 是用来存储每行字符的变量 |
k | 空格数控制变量用来决定每行前面要输出多少个空格 |
综上,尽量优化代码长度,同时确保代码的可读性,个人认为这么写还是不错的,有其他方法欢迎在评论区提出。
char ch;
string str[101];
int main(){
int n; scanf("%d %c", &n, &ch);
int sum = 1, now = 1, ind = 0;
while(sum <= n){
rep(i, 1, now){
str[ind] += ch;
}
now += 2;
sum += now * 2;
ind++;
}
int k = 1;
for(int i = ind - 1; i >= 0; i--){
rep(j, 2, k) cout << " ";
k++;
cout << str[i] << '\n';
}
k--;
for(int i = 1; i <= ind - 1; i++){
k--;
rep(j, 2, k) cout << " ";
cout << str[i] << '\n';
}
cout << n - (sum - 2 * now) << '\n';
}