PAT 1050. 螺旋矩阵(25)
来源:互联网 发布:国家工商局网络教学 编辑:程序博客网 时间:2024/06/04 20:04
要想解决本题,要解决以下几个问题:
1. 获得准确的m、n
2. 按照题目的要求,以顺时针螺旋的方式安放元素
代码如下:
#include <iostream>#include <vector>#include <algorithm>using namespace std;int m , n;void Findmn(int N){int i , j;for(i = 2 ; i * i <= N ; i++){if(N % i == 0){j = N / i;if(abs(m - n) > abs (i - j)){m = max(i , j);n = min(i , j);}}}}bool cmp(int a , int b){return a > b;}int main(){int N;cin>>N;vector<int> Nums(N);int i,j;for(i = 0 ; i < N ; i++)cin>>Nums[i];sort(Nums.begin(),Nums.end(),cmp);m = N;n = 1;Findmn(N);vector<vector<int> > W(m);for(i = 0 ; i < m ; i++)W[i].assign(n,0);int m1 = m -1, n1 = n , m2 , n2;vector<int> dx(N),dy(N);i = 0;if(N == 1)cout<<Nums[0]<<endl;else{while(n1){n2 = n1;while(n2--){dx[i] = 0;dy[i++] = 1;}n1--;m2 = m1;while(m2--){dx[i] = 1;dy[i++] = 0;}m1--;if(n1 == 0)break;n2 = n1;while(n2--){dx[i] = 0;dy[i++] = -1;}n1--;m2 = m1;while(m2--){dx[i] = -1;dy[i++] = 0;}m1--;}int x1 = 0 , y1 = -1;for(i = 0 ; i < N ; i ++){x1 += dx[i];y1 += dy[i];W[x1][y1] = Nums[i];}for(i = 0 ; i < m ; i++){cout<<W[i][0];for(j = 1 ; j < n ; j++){cout<<' '<<W[i][j];}cout<<endl;}}system("pause");}
0 0
- PAT 1050. 螺旋矩阵(25)
- PAT 1050. 螺旋矩阵(25)
- PAT 1050.螺旋矩阵(25)
- PAT 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25) PAT
- pat 1050. 螺旋矩阵
- PAT螺旋矩阵(25)
- C++ - PAT - 1050. 螺旋矩阵(25)
- PAT BASIC LEVEL 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)-PAT乙级
- PAT-A-1050. 螺旋矩阵(25)
- PAT乙级 1050. 螺旋矩阵(25)
- PAT乙级 1050. 螺旋矩阵(25)
- [PAT乙级]1050. 螺旋矩阵(25)
- PAT乙级 1050. 螺旋矩阵(25)
- PAT乙级1050. 螺旋矩阵(25)
- pat 乙级 1050. 螺旋矩阵(25)
- PAT刷题:1050. 螺旋矩阵(25)
- 04:猴子吃桃问题
- spring mvc常用的注解
- OC语言 集合>>字典=>可变字典与不可变字典
- 字符串转化map
- Mac OS X中配置Apache
- PAT 1050. 螺旋矩阵(25)
- ExtJS grid全选事件
- [Full script] 从网页获取数据写入Excel (API 模式)初稿
- iOS开发-静态库.a的制作
- office2007如何在安装后激活
- 老调重弹:JDBC系列之<驱动加载原理全面解析)
- MTK Android user版本如何打开root权限
- MFC好书推荐
- 官网 webrtc_android 源码下载和编译