AcWing 3169. 等腰三角形
原题链接
简单
作者:
静静在Coding
,
2023-01-18 21:14:13
,
所有人可见
,
阅读 38
模拟
- 将每个数字存入一个字符串
- 找规律填入每个数字(每次填入一个宽度)
#include <bits/stdc++.h>
#include <climits>
#include <string>
using namespace std;
const int N = 1010;
char g[N][N];
void slove(int n)
{
memset(g, 0, sizeof g);
string s = "";
int sz = 4 * n - 4;
for (int i = 1;; i++) {
if (s.size() >= sz)
break;
s += to_string(i);
}
cout << s << endl;
int cnt = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n + i - 1; j++) {
g[i][j] = '.'; // 填入每一个'.'
}
g[i][n - i + 1] = s[cnt++];//左边的腰
}
for (int i = 2; i <= 2 * n - 1; i++) //底
g[n][i] = s[cnt++];
for (int i = n - 1, j = 2 * n - 2; i >= 2; i--, j--)
g[i][j] = s[cnt++];//右边的腰
for (int i = 1; i <= n; i++) {
printf("%s\n", g[i] + 1);
}
}
int main()
{
int n;
while (cin >> n) {
slove(n);
}
return 0;
}