#include<iostream>
using namespace std;
int main()//打印沙漏 打多少空格或者星号要找规律 一般联系它所在的行数或者列数
{
int k;
cin >> k;
char symbol;
cin >> symbol;
int n = 1;
//int i = 0; 下面用到的i都应该定义成局部变量而不是全局变量
while (2 * n*n - 1 <= k)//计算层数
{
n++;
}
n--;//因为是加了1之后再与k比较才跳出循环,所以实际层数要减掉1
int rest = k - 2 * n*n + 1;
int y = 2 * n - 1;//最多那层的个数
int x = 0;
while (y > 0)
{
for (int i=0; i < x; i++)
cout << " ";
for (int i=0; i < y; i++)
cout << symbol;
cout << endl;
y = y - 2;
x++;
}
x--;//x多加了一次
y = y + 2;
while (x > 0)
{
y = y + 2;//因为共同的那一行一个星不打出来
x--;//所以y要先再加一次,x也要先减一次
for (int i=0; i < x; i++)
cout << " ";
for (int i=0; i < y; i++)
cout << symbol;
cout << endl;
}
cout << rest;
}
PTA1027打印沙漏
最新推荐文章于 2024-07-24 14:05:37 发布