【PAT】【Advanced Level】1105. Spiral Matrix (25)
来源:互联网 发布:淘宝卖家插件推荐 编辑:程序博客网 时间:2024/06/07 06:01
1105. Spiral Matrix (25)
This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrixis filled in from the first element at the upper-left corner, then move in a clockwise spiral. The matrix has m rows and ncolumns, where m and n satisfy the following: m*n must be equal to N; m>=n; and m-n is the minimum of all the possible values.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N. Then the next line contains N positive integers to be filled into the spiral matrix. All the numbers are no more than 104. The numbers in a line are separated by spaces.
Output Specification:
For each test case, output the resulting matrix in m lines, each contains n numbers. There must be exactly 1 space between two adjacent numbers, and no extra space at the end of each line.
Sample Input:1237 76 20 98 76 42 53 95 60 81 58 93Sample Output:
98 95 9342 37 8153 20 7658 60 76
https://www.patest.cn/contests/pat-a-practise/1105
思路:
先求m,n
再根据要求模拟
注意边界情况
CODE:
#include<iostream>#include<cstdio>#include<cmath>#include<vector>#include<algorithm>#define N 10010using namespace std;vector<int> t;bool cmp(int a,int b){return a>b;}int main(){int nn;scanf("%d",&nn);int m,n;for(int i=1;i*i<=nn;i++){if (nn%i==0){n=i;m=nn/i;}}//cout<<m<<" "<<n<<endl;int res[m][n];for (int i=0;i<nn;i++){int num;scanf("%d",&num);t.push_back(num);}sort(t.begin(),t.end(),cmp);int tb[2]={0,m-1},lr[2]={0,n-1};int x=0,y=0,r=0;int nx[2]={0,1};while(r<nn){res[x][y]=t[r];//cout<<x<<" "<<y<<" "<<res[x][y]<<" "<<nx[0]<<" "<<nx[1]<<endl;r++;x+=nx[0];y+=nx[1];if (y>lr[1]){y--;x++;tb[0]++;nx[0]=1;nx[1]=0;}elseif (x>tb[1]){x--;y--;lr[1]--;nx[0]=0;nx[1]=-1;}elseif (y<lr[0]){y++;x--;tb[1]--;nx[0]=-1;nx[1]=0;}elseif (x<tb[0]){x++;y++;lr[0]++;nx[0]=0;nx[1]=1;}}for (int i=0;i<m;i++){for (int j=0;j<n;j++){if (j!=0) printf(" ");printf("%d",res[i][j]);}printf("\n");}return 0;}
- 【PAT】【Advanced Level】1105. Spiral Matrix (25)
- PAT (Advanced Level) Practise 1105 Spiral Matrix (25)
- PAT (Advanced Level) Practise 1105 Spiral Matrix (25)
- PAT (Advanced Level) Practise 1105. Spiral Matrix (25) 蛇形填数
- 1105. Spiral Matrix (25)【模拟】——PAT (Advanced Level) Practise
- 【PAT】1105. Spiral Matrix (25)
- PAT 1105. Spiral Matrix (25)
- [pat]1105. Spiral Matrix (25)
- PAT--1105. Spiral Matrix (25)
- PAT 1105. Spiral Matrix (25)
- pat 1105. Spiral Matrix (25)
- 【PAT】1105. Spiral Matrix
- PAT A 1105. Spiral Matrix (25)
- Pat(A) 1105. Spiral Matrix (25)
- PAT 甲级 1105. Spiral Matrix (25)
- PAT 甲级:1105. Spiral Matrix
- pat-a1105. Spiral Matrix (25)
- 1105. Spiral Matrix (25)-PAT甲级真题
- C
- python里创建任务执行一半时取消任务执行
- JS跑马灯效果实现(很好用)
- python 迭代器
- Java的*.class字节码查看方法
- 【PAT】【Advanced Level】1105. Spiral Matrix (25)
- devExpress GridControl repositoryItemCheckEdit 设置值对应的选中状态
- Spring Security# RoleHierarchy
- CAS实现单点登录(数据库认证)
- apache日志分割
- C++ 格式读取文件中的参数
- js写一个旋转木马
- Linux 简介
- WOJ1223-Dining