1050. 螺旋矩阵(25)
2017-10-07 10:13
190 查看
题目链接
题目:
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m*n等于N;m>=n;且m-n取所有可能值中的最小值。
输入格式:
输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数。所有数字不超过104,相邻数字以空格分隔。
输出格式:
输出螺旋矩阵。每行n个数字,共m行。相邻数字以1个空格分隔,行末不得有多余空格。
输入样例:
输出样例:
题解:
把待输出的矩阵预处理一下放到m*n的二维数组中。
代码:
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 10010;
int matrix[maxn][maxn], A[maxn];
bool cmp (int a, int b){
return a > b;
}
int main() {
int N;
scanf("%d", &N);
for(int i = 0; i < N; i++) {
scanf("%d", &A[i]);
}
if(N == 1){
printf("%d", A[0]);
return 0;
}
sort(A, A + N, cmp);
int m = (int)ceil(sqrt(1.0 * N));
while(N % m != 0)
m++;
int n = N / m, i = 1, j = 1, now = 0;
int U = 1, D = m, L = 1, R = n;
while(now < N){
while(now < N && j < R)
matrix[i][j++] = A[now++];
while(now < N && i < D)
matrix[i++][j] = A[now++];
while(now < N && j > L)
matrix[i][j--] = A[now++];
while(now < N && i > U)
matrix[i--][j] = A[now++];
U++, D--, L++, R--;
i++, j++;
if(now == N - 1)
matrix[i][j] = A[now++];
}
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
printf("%d",matrix[i][j]);
if(j < n) printf(" ");
else printf("\n");
}
}
return 0;
}
题目:
本题要求将给定的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
题解:
把待输出的矩阵预处理一下放到m*n的二维数组中。
代码:
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 10010;
int matrix[maxn][maxn], A[maxn];
bool cmp (int a, int b){
return a > b;
}
int main() {
int N;
scanf("%d", &N);
for(int i = 0; i < N; i++) {
scanf("%d", &A[i]);
}
if(N == 1){
printf("%d", A[0]);
return 0;
}
sort(A, A + N, cmp);
int m = (int)ceil(sqrt(1.0 * N));
while(N % m != 0)
m++;
int n = N / m, i = 1, j = 1, now = 0;
int U = 1, D = m, L = 1, R = n;
while(now < N){
while(now < N && j < R)
matrix[i][j++] = A[now++];
while(now < N && i < D)
matrix[i++][j] = A[now++];
while(now < N && j > L)
matrix[i][j--] = A[now++];
while(now < N && i > U)
matrix[i--][j] = A[now++];
U++, D--, L++, R--;
i++, j++;
if(now == N - 1)
matrix[i][j] = A[now++];
}
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
printf("%d",matrix[i][j]);
if(j < n) printf(" ");
else printf("\n");
}
}
return 0;
}
相关文章推荐
- PAT-乙级-1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- [PAT乙级]1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- pat 乙级 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)(C++)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 自己写的1050螺旋矩阵(25)
- PAT Basic 1050. 螺旋矩阵(25)(C语言实现)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- PAT 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)-PAT乙级真题
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)