有免费建站的网站吗,嘉兴网站制作优化,线上投票怎么做,云服务器价格购买价格表1050. 螺旋矩阵(25) 时间限制150 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue本题要求将给定的N个正整数按非递增的顺序#xff0c;填入“螺旋矩阵”。所谓“螺旋矩阵”#xff0c;是指从左上角第1个格子开始#xff0c;按顺时针螺旋方向填充。要求… 1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的顺序填入“螺旋矩阵”。所谓“螺旋矩阵”是指从左上角第1个格子开始按顺时针螺旋方向填充。要求矩阵的规模为m行n列满足条件m*n等于Nmn且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 解题计划: 1,根据N,找出符合条件的m,n;
2,一个一维数组int Arr[len]可以根据首地址Arr和len这两个量唯一确定,同样二维数组int Arr_2D[row][col]可以用首地质Arr_2D和row,col三个量唯一确定,因此这里采用递归的方法,就像播洋葱一样,一层一层的剥掉(输出); 由本题所学到的:
1,二维数组怎样调用;
2,递归函数应用; 代码: /************************************************************************* File Name: 1050.c Author: YueBo Mail: yuebowhu163.com Created Time: Sun 11 Jun 2017 11:27:00 AM CST************************************************************************/#include stdio.h
#include math.h
#include stdlib.hint arr[10240][10240];
void get(int N, int *pm, int *pn)
{int i;for (i (int)sqrt((double)N); i N; i){*pm i;*pn (int)(N / i);if (N % i 0 *pm *pn){return;}}return;
}void insertMatrix(int arr[][10240], int input[], int start, int start_i, int start_j, int m, int n)
{int i, j, k;if (m 1 || n 1){return;}k start;for (j 0; j n; j){arr[start_i0][start_jj] input[k];k;}for (i 1; i m-1; i){arr[start_ii][start_jn-1] input[k];k;}for (j n-1; j 0 m 1; j--){arr[start_im-1][start_jj] input[k];k;}for (i m-2; i 1 n 1; i--){arr[start_ii][start_j0] input[k];k;}insertMatrix(arr, input, k, start_i1, start_j1, m-2, n-2);
}void printMatrix(int (*arr)[10240], int m, int n)
{int i, j;for (i 0; i m; i){for (j 0; j n; j){printf(%d%s, arr[i][j], j n-1 ? :);}printf(\n);}
}int cmp(const void *a, const void *b)
{return *(int *)b - *(int *)a;
}int main()
{int N, m, n;int i, j;scanf(%d, N);get(N, m, n);int *input (int *)malloc(N*sizeof(int));for (i 0; i N; i){scanf(%d, inputi);}qsort(input, N, sizeof(int), cmp);insertMatrix(arr, input, 0, 0, 0, m, n);printMatrix(arr, m, n);return 0;
}