pat乙级1050螺旋矩阵

1、用vector建立二维数组:

1 vector<vector<int>> arr(rows);
2 for (int i = 0; i < rows; i++)
3     arr[i].resize(cols);

或:

1 vector<vector<int>> v(m, vector<int>(n));

2、当数组已初始化但某些下标还未赋值时,此下标对应的变量为NULL(见34行)

代码:

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 #include <math.h>
 5 using namespace std;
 6
 7 bool cmp(int a, int b)
 8 {
 9     return a > b;
10 }
11 int main()
12 {
13     int n;
14     cin >> n;
15     vector<int> v(n);
16     for (int i = 0; i < n; i++)
17         cin >> v[i];
18     sort(v.begin(), v.end(), cmp);
19     int s = sqrt(n);
20     while (n % s) s--;
21     int cols = s, rows = n / s;
22     /*
23     vector<vector<int>> arr(rows);
24     for (int i = 0; i < rows; i++)
25         arr[i].resize(cols);
26     */
27     vector<vector<int>> arr(rows, vector<int>(cols));
28     int i = 0, j = 0, t = 0;
29     int direction = 1;
30     while (t < n)
31     {
32         if (direction == 1)
33         {
34             if (j < cols && arr[i][j] == NULL)
35                 arr[i][j++] = v[t++];
36             else
37             {
38                 i++;
39                 j--;
40                 direction = 2;
41             }
42         }
43         else if (direction == 2)
44         {
45             if (i < rows && arr[i][j] == NULL)
46                 arr[i++][j] = v[t++];
47             else
48             {
49                 j--;
50                 i--;
51                 direction = 3;
52             }
53         }
54         else if (direction == 3)
55         {
56             if (j >= 0 && arr[i][j] == NULL)
57                 arr[i][j--] = v[t++];
58             else
59             {
60                 i--;
61                 j++;
62                 direction = 4;
63             }
64         }
65         else if (direction == 4)
66         {
67             if (i >= 0 && arr[i][j] == NULL)
68                 arr[i--][j] = v[t++];
69             else
70             {
71                 i++;
72                 j++;
73                 direction = 1;
74             }
75         }
76     }
77     for (int i = 0; i < rows; i++)
78     {
79         for (int j = 0; j < cols; j++)
80         {
81             if (j) cout << " ";
82             cout << arr[i][j];
83         }
84         cout << endl;
85     }
86     return 0;
87 }

原文地址:https://www.cnblogs.com/lxc1910/p/8568797.html

时间: 2024-10-01 00:30:16

pat乙级1050螺旋矩阵的相关文章

PAT Basic 1050 螺旋矩阵 (25 分)

本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m≥n:且 m−n 取所有可能值中的最小值. 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数.所有数字不超过 1,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行 n 个数字,共 m 行.相邻数字以 1 个空格分隔,行末不得有多余空格. 输入样例: 12 3

PAT 1050. 螺旋矩阵

PAT 1050. 螺旋矩阵 本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m-n取所有可能值中的最小值. 输入格式: 输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数.所有数字不超过104,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行n个数字,共m行.相邻数字以1个空格分隔,行末不得有多余空格.

PTA乙级(*1050 螺旋矩阵 (25分))

1050 螺旋矩阵 (25分) https://pintia.cn/problem-sets/994805260223102976/problems/994805275146436608 https://paste.ubuntu.com/p/Dn7fQ9Gf73/ #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <cmath>

1050 螺旋矩阵 (25分)

VS2019堆栈溢出---定义了过大的数组,运行程序弹出chkstk.asm的解决方法 用new定义数组 首先要算出合适的m,n--行.列数 附:几个特殊的测试点,输入3个数.27个数.11个数 然后new一个二维数组,将给出的数套进去, i=0;j=0;光标先向右,再向下,再向左,再向上,再向右...如何循环 给出四周的边界数--top = 0, left = -1, right = n, down = m; 再给出当前的轨迹方向-- r = 1, l = 0, up = 0, d = 0;

1050. 螺旋矩阵(25) pat乙级题

本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m-n取所有可能值中的最小值. 输入格式: 输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数.所有数字不超过104,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行n个数字,共m行.相邻数字以1个空格分隔,行末不得有多余空格. 输入样例: 12 37 76 20 98 76 42 53 95

1050. 螺旋矩阵(25)

本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m-n取所有可能值中的最小值. 输入格式: 输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数.所有数字不超过104,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行n个数字,共m行.相邻数字以1个空格分隔,行末不得有多余空格. 输入样例: 12 37 76 20 98 76 42 53 95

PAT-乙级-1050 螺旋矩阵

本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n列,满足条件:m×n 等于 N:m≥n:且 m?n 取所有可能值中的最小值. 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数.所有数字不超过 104,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行 n 个数字,共 m 行.相邻数字以 1 个空格分隔,行末不得有

1050 螺旋矩阵

题意: 结果: 分析: 要仔细读题,题目中已经暗示了做题的方法,那么这就是一类简单模拟题. 这个方法就是: 步骤一,把元素向右一直填入矩阵,直到碰到矩阵边界,或者将要填入的位置已存在元素,就停止填入,转步骤二: 步骤二,把元素向下一直填入矩阵,直到碰到矩阵边界,或者将要填入的位置已存在元素,就停止填入,转步骤三: 步骤三,把元素向左一直填入矩阵,直到碰到矩阵边界,或者将要填入的位置已存在元素,就停止填入,转步骤四: 步骤四,把元素向上一直填入矩阵,直到碰到矩阵边界,或者将要填入的位置已存在元素,

PAT Basic 1050

1050 螺旋矩阵 本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m≥n:且 m?n 取所有可能值中的最小值. 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数.所有数字不超过 10?4??,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行 n 个数字,共 m 行.相邻数字以