1105. Spiral Matrix (25)

旧城等待, 2022-05-28 07:05 209阅读 0赞

This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the upper-left corner, then move in a clockwise spiral. The matrix has m rows and n columns, 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:

  1. 12
  2. 37 76 20 98 76 42 53 95 60 81 58 93

Sample Output:

  1. 98 95 93
  2. 42 37 81
  3. 53 20 76
  4. 58 60 76

题目大意:

代码:

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<math.h>
  4. using namespace std;
  5. bool cmp(int a,int b)
  6. {
  7. return a>b;
  8. }
  9. int a[100000];
  10. int b[10000][10000];
  11. int main()
  12. {
  13. int n,m,k,t=0;
  14. scanf("%d",&n);
  15. k= sqrt((double)n);
  16. while(k>1) {
  17. if(n % k == 0)
  18. break;
  19. k--;
  20. }
  21. m=n/k;
  22. for(int i=0;i<n;i++)
  23. {
  24. scanf("%d",&a[i]);
  25. }
  26. sort(a,a+n,cmp);
  27. for (int i=0;t<n;i++) {
  28. for (int j=i;j<k-i&&t<n;j++)
  29. b[i][j]=a[t++];
  30. for (int j=i+1;j<m-1-i&&t<n;j++)
  31. b[j][k-1-i]=a[t++];
  32. for (int j=k-i-1;j>=i &&t<n;j--)
  33. b[m-1-i][j]=a[t++];
  34. for (int j=m-2-i;j>=i+1&&t<n;j--)
  35. b[j][i]=a[t++];
  36. }
  37. for(int i=0;i<m;i++)
  38. {
  39. for(int j=0;j<k;j++)
  40. {
  41. if(j==0)
  42. {
  43. printf("%d",b[i][j]);
  44. }
  45. else
  46. {
  47. printf(" %d",b[i][j]);
  48. }
  49. }
  50. printf("\n");
  51. }
  52. }

发表评论

表情:
评论列表 (有 0 条评论,209人围观)

还没有评论,来说两句吧...

相关阅读

    相关 1105 Spiral Matrix (25分)

    题意: 第一行输入数据的个数n,然后输入n个数字,首先对n个数按从大到小顺序排序。最后输出的时候按照螺旋状输出。 解题思路: 1.state记录当前填充方向,首先