ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PAT乙级1050-----螺旋矩阵 (25分)

2020-02-29 13:05:36  阅读:214  来源: 互联网

标签:1050 25 right PAT 76 int ++ flag dir


1050 螺旋矩阵 (25分)

 

 

输入样例:

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.将输入的数字升序排序
2.设置一个二维数组S,一个上下区间[r_up,r_down],一个左右区间[c_left,c_right],以及行列标志flag=1(flag=1表示此次操作的是行),方向标志dir(dir=0,1,2,3分别代表方向向右下左上)
3.每往右走一次r_up++,左走一次r_down--,下走一次c_right--,上走一次c_left++,然后设置i和j,移动i或j将有序数字加入S[i][j]即可


首次通过代码:
 1 #include<stdio.h>
 2 #include<math.h>
 3 void sort(int a[],int b){
 4     for(int i=b;i>0;i--){
 5         if(a[i]>a[i-1]){
 6             int swap;
 7             swap=a[i];
 8             a[i]=a[i-1];
 9             a[i-1]=swap;
10         }
11     }
12 }
13 void func(int a[],int b){
14     int x=sqrt((double)b);
15     int y=sqrt((double)b);
16     while(x*y!=b){
17         if(x*y<b) y++; 
18         else x--;
19     }
20     a[0]=x;a[1]=y;
21 }
22 int main(){
23     int sum;
24     int a[10004];
25      int b[2];
26      int matrix[10000][100];
27     scanf("%d",&sum);
28     for(int i=0;i<sum;i++){
29         scanf("%d",&a[i]);
30         sort(a,i);
31      }
32     func(b,sum);
33     int r_up=1,r_down=b[1];
34     int c_left=1,c_right=b[0];
35     int flag=1;
36     int dir=0;//方向 0---右 1---下 2---左 3---上 
37     int num=0;
38     int i=1,j=1;
39     while(1){
40         int i,j;
41         if(flag){    
42             if(dir==0) {
43                 
44                 i=r_up;j=c_left;
45                 while(j<=c_right){
46                     matrix[i][j]=a[num++];
47                     j++;
48                 }
49                 r_up++;
50             }
51             else if(dir==2){
52                 i=r_down;j=c_right;
53                 while(j>=c_left){
54                     matrix[i][j]=a[num++];
55                     j--;
56                 }
57                 r_down--;
58             }
59             flag=0;
60             dir=(dir+1)%4;
61         }
62         else{
63             if(dir==1){
64                 i=r_up;j=c_right;
65                 while(i<=r_down){
66                     matrix[i][j]=a[num++];
67                     i++;
68                 }
69                 c_right--;
70             }
71             else if(dir==3){
72                 i=r_down;j=c_left;
73                 while(i>=r_up){
74                     matrix[i][j]=a[num++];
75                     i--;
76                 }
77                 c_left++;
78             }
79             flag=1;
80             dir=(dir+1)%4;
81         }
82         if(r_down<r_up||c_left>c_right) break;
83     }
84     for(int i=1;i<=b[1];i++){
85       for(int j=1;j<=b[0];j++){
86        printf("%d",matrix[i][j]);
87        if(j!=b[0]) printf(" ");
88       }
89        if(i!=b[1]) printf("\n");
90       }
91     return 0;
92 }
View Code

 

标签:1050,25,right,PAT,76,int,++,flag,dir
来源: https://www.cnblogs.com/a982961222/p/12382435.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有