今天做了一种不一样的方法,是用直角坐标系和矩阵的思路打印沙漏,将沙漏创建成一个矩阵,并将其根据对角线分成四块,每块可以由 i 和j 的两条关系式直接表示出来,在数学上感觉比较实用,大家参考下哈
#include <iostream>
using namespace std;
int main()
{
int n;
char c;
cin >> n >> c;
int shuzi;
int biaozhun[40];
int shengyu = 0;
for (int i = 1; i < 24; ++i)
{
biaozhun[i] = 2 * i * i - 1;
if (biaozhun[i] <= n && biaozhun[i + 1] > n)
{
shengyu = n - biaozhun[i];
shuzi = i;
}
}
int m = 2 * shuzi - 1;
char arr[m][m];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
{
arr[i][j] = { c };
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
{
if (j < i && i + j < m - 1)arr[i][j] = ' ';
}
}
int flag;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
{
if (j > i && j + i > m - 1)flag = 0;
else flag = 1;
if (flag)cout << arr[i][j];
}
cout << endl;
}
cout << shengyu;
return 0;
}
PS:重庆大学大一电气信息8班班长,不知道有没有人能认得出来我T-T
在vs上定义arr[m][m]是不行的,在PTA和dev里面可以。