1105. Spiral Matrix (25)

题目:

https://www.patest.cn/contests/pat-a-practise/1105

大概描述:

将一串数按照从大到小的顺序存储到螺旋数组中

特征词:

模拟

使用语言:

C++

解题思想:

就是先定义一个二维数组,然后按照4类规则进行存储

题目得分:

21

提交次数:

5

时间

220分钟

代码

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXI = 10009;
const int MAXII = 109;
bool qq(int a,int b){
 return a > b;
}
int main(){
 int m[MAXI];
 int m1[MAXII][MAXII];
 int num;
 scanf("%d",&num);
 int i = 0;
 for(i = 0;i < num;i++){
 scanf("%d",&m[i]);
 }
 //intf("OK\n");
 int j = 0;
 for(i = 1;i <= (sqrt(num) + 1);i++){
 if(num %i == 0){
 j = i;
 }
 }
 int cos = j;
 int clu = num / j;
 // printf("da %d xiao%d\n",cos,clu);
 if(num == 2){
 cos = num / j;
 clu = j;
 }
 //建一个二维数组将值输入
 sort(m,m + num,qq);
 //printf("sort OK\n");
 j = 0;
 int u = 0;
 int k = clu;
 int r = cos;
 u = 0;
 i = 0;
int f = -1;
int cl = clu;
 int s = -1;
 while(j != num){

 for(i = ++f;i < cl&&j != num;i++){
 m1[u][i] = m[j++];
 // printf("%d !",m1[u][i]);
 }
 cl --;
 // printf("\n");
 i --;
 for(u++;u < r &&j != num;u++){
 m1[u][i] = m[j++];
 // printf("u[%d][%d]%d !",u,k,m1[u][k]);
 }
 k = i;
 //printf("\n");
 r --;
 u --;
 for(i = --k;i > s&&j != num;i--){
 m1[u][i] = m[j++];
 // printf("%d !",m1[u][i]);
 }
 //printf("\n");
 s ++;
 i ++;
 for(--u;u > f&&j != num;u --){
 m1[u][i] = m[j++];
 // printf("u[%d][%d] %d !",u,i,m1[u][i]);
 }
 //printf("\n");
 u ++;
 //printf("OOK\n");
 }
 //printf("OVER\n");
 for(i = 0;i < cos;i++){
 printf("%d",m1[i][0]);
 for(j = 1;j < clu;j++){
 printf(" %d",m1[i][j]);
 }
 printf("\n");
 }
}

运行结果

21

 成长

原本以为刷过了最短路径+深度优先接下来会简单点,看来我还是踏实练功吧

发表评论

电子邮件地址不会被公开。 必填项已用*标注