数组-4—算法—6.11(P5731,P5732)

洛谷:P5731P5732

作者:innno

P5731:【深基5.习6】蛇形方阵

题目描述

给出一个不大于 9 的正整数 n,输出 n*n的蛇形方阵。

从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。

输入格式

输入一个正整数 n,含义如题所述。

输出格式

输出符合题目要求的蛇形矩阵。

样例 #1

样例输入 #1

4

样例输出 #1

1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7

提示

数据保证,1≤𝑛≤9。

P5731
/**
 * ClassName: ${NAME}
 * package: ${PACKAGE_NAME}
 * Description:
 * @Author: innno
 * @Create: 2024/2/27 - 21:54
 * @Version: v1.0
 */
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
ll num[100];
int main()
    {
        ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
        ll n, b, c, z, v;
        cin >> n;
        ll x = (2 * n - 1) / 4, p = (2 * n - 1) % 4;
        p != 0 ? (b = x + 1), p-- : b = x;
        p != 0 ? (c = x + 1), p-- : c = x;
        p != 0 ? (z = x + 1), p-- : z = x;
        p != 0 ? (v = x + 1) : v = x;;
        ll _b[b],_c[c], _z[z], _v[v];
        ll _i = 0, _n = n - 1;
        _b[0] = _n;
        while (_n != 0)
            {
                _c[_i] = _n;
                _z[_i] = _n;
                _n -= 1;
                if (_n != 0)
                    {
                        _v[_i] = _n;
                        _i++;
                        _b[_i] = _n;
                        _n -= 1;
                    }
            }
        ll value = 2;
        ll key = 1;
        num[1] = 1;
        for (int j = 1; j <= x + 1; j++)
            {
                if (b >= 1)//+1
                    {
                        for (ll i = 0; i < _b[j-1]; i++)
                            {
                                num[key + i + 1] = value;
                                value++;
                            }
                        key = key + _b[j-1];
                        b--;
                    }
                if (c >= 1)//+n
                    {
                        for (ll i = 0; i < _c[j-1]; i++)
                            {
                                num[key + (n * (i + 1))] = value;
                                value++;
                            }
                        key = key + (n * _c[j-1]);
                        c--;
                    }
                if (z >= 1)//-1
                    {
                        for (ll i = 0; i < _z[j-1]; i++)
                            {
                                num[key - i - 1] = value;
                                value++;
                            }
                        key = key - _z[j-1];
                        z--;
                    }
                if (v >= 1)//-n
                    {
                        for (ll i = 0; i < _v[j-1]; i++)
                            {
                                num[key - (n * (i + 1))] = value;
                                value++;
                            }
                        key = key - (n * _v[j-1]);
                        v--;
                    }
            }
        for (int i = 1; i <= n * n; i++)
            {
                cout << setw(3) << setfill(' ') << num[i];
                if (i % n == 0)cout << '\n';
            }
        return 0;
    }

P5732:【深基5.习7】杨辉三角

题目描述

给出n(n≤20),输出杨辉三角的前 n 行。

如果你不知道什么是杨辉三角,可以观察样例找找规律。

样例 #1

样例输入 #1

6

样例输出 #1

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
P5732
/**
 * ClassName: ${NAME}
 * package: ${PACKAGE_NAME}
 * Description:
 * @Author: innno
 * @Create: 2024/2/27 - 21:54
 * @Version: v1.0
 */
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
ll Triangle[21][21];

int main()
    {
        ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
        ll n;
        cin >> n;
        for (ll i = 1; i <= n; i++)
            {
                Triangle[i][1] = 1;
            }
        Triangle[2][2] = 1;
        for (ll i = 1; i <= n; i++)
            {
                for (ll j = 1; j <= i; j++)
                    {
                        if (j == 1)
                            {
                                cout << Triangle[i][j] << " ";
                            } else
                            {
                                Triangle[i][j] = Triangle[i - 1][j - 1] + Triangle[i - 1][j];
                                cout << Triangle[i][j] << " ";
                            }
                    }
                cout << '\n';
            }
        return 0;
    }

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部