PAT乙级1050
2017-01-15 17:34
162 查看
1050. 螺旋矩阵(25)
时间限制150 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
本题要求将给定的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 60 81 58 93
输出样例:
98 95 93 42 37 81 53 20 76 58 60 76
#include<iostream> #include<vector> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<iomanip> using namespace std; int cmp(int a, int b) { return a > b; } /*public class Helix { static int N = 0; public static int Helix(int x, int y) { if ((x==1) && (y==1)) return 1; if ((x-y>=1)&&(x+y<=N)) return (1 + Helix(x+1,y)); if ((x-y>=1)&&(x+y>N)) return (1 + Helix(x, y+1)); if ((x-y<1)&&(x+y<=N+1)) return (1 + Helix(x, y-1)); if ((x-y<1)&&(x+y)>N+1) return (1 + Helix(x-1,y)); else return 0;} public static void main(String[] args) { N = //输入int值; for (int i= 1; i <= N; i++){ for (int j= 1; j <= N; j++) System.out.print(Helix(i,j) + "\t"); System.out.println(""); } }}这个就是先把矩阵每个位置二元组转换成一维时对应的数值求出来,我转别人的,不是自己想的,实质就是迷宫求解问题 */ int main() { int N; cin >> N; int t; int N1 = N; vector<int> v; while (N--) { cin >> t; v.push_back(t); } sort(v.begin(), v.end(), cmp);//非递增 int i; for (i = sqrt(N1); i <= N1; i++) { if (N1%i == 0) break; }//m和n肯定一个小于等于N平方根另一个大于等于N平方根 int m = max(i,N1/i), n = N1 / m; int**a = new int*[m]; for (int i = 0; i < m; i++) { a[i] = new int ; } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = 0; } }//必须初始化为0 i = 0; 4000 int x = 0, y = 0; while (i < N1) { while (y < n&&!a[x][y]) a[x][y++] = v[i++]; y--; x++; while (x < m && !a[x][y]) a[x++][y] = v[i++]; x--; y--; while (y >= 0 && !a[x][y]) a[x][y--] = v[i++]; y++; x--; while (x >= 0 && !a[x][y]) a[x--][y] = v[i++]; x++; y++; }//螺旋放置的过程:先声明横坐标x和纵坐标y,然后类似走迷宫的方式,若前面能走(即判断下一个位置是否为0,不为0就不能进行赋值了) //分为四个过程,右下左上,依次进行即可 for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << a[i][j]; if (j != n - 1) cout << " "; else cout << endl; } } return 0; }
相关文章推荐
- 1050. 螺旋矩阵(25)-PAT乙级真题
- PAT乙级(Basic Level)1050(C++)
- pat 乙级 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25) PAT乙级真题
- 乙级 PAT 1050. 螺旋矩阵(25)
- [PAT-乙级]1050.螺旋矩阵
- pat乙级1050. 螺旋矩阵(25)
- PAT 乙级1050. 螺旋矩阵(25)&&蛇形填数&&51Nod 1283 最小的周长
- pat乙级真题 1050. 螺旋矩阵(25)
- PAT乙级—1050
- PAT乙级 1050 螺旋矩阵(25)
- PAT考试乙级1050(C语言实现) (重点题目)(关于保留小数的坑)
- PAT乙级 1050. 螺旋矩阵(25)
- PAT乙级1050. 螺旋矩阵(25)
- PAT乙级 1050. 螺旋矩阵(25)
- PAT乙级1050 螺旋矩阵
- PAT考试乙级1050(C语言实现) (重点题目)(按格式读取,使用容器vector)
- PAT乙级—1050. 螺旋矩阵(25)-native
- PAT-乙级-1050. 螺旋矩阵(25)
- PAT考试乙级1050(C语言实现) (重点题目)(memset以及思路)