PAT Basic 1050 螺旋矩阵 (25 分)

本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。

输入格式:

输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 1,相邻数字以空格分隔。

输出格式:

输出螺旋矩阵。每行 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
我个人觉得,有的题目,思路清晰,比写的少更加重要,这道题,考的是设计模式,如何设计出一个OBJ,进行控制性移动,类似小游戏中的主角,可以上下左右移动#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int data[10000][10000]={0};
int width,height;
enum dir{ l,r,u,d }dir;//枚举设定方向
int x=0,y=0;
void changedir(){//改变路线
    switch(dir){
        case l:dir=u;break;
        case u:dir=r;break;
        case r:dir=d;break;
        case d:dir=l;break;
    }
}
void ahead(){
    switch(dir){
        case l:
            if(x-1>=0&&data[x-1][y]==0) x--;
            else {
                changedir();
                ahead();
            }
            break;
        case r:
            if(x+1<width&&data[x+1][y]==0) x++;
            else{
                changedir();
                ahead();
            }
            break;
        case u:
            if(y-1>=0&&data[x][y-1]==0) y--;
            else{
                changedir();
                ahead();
            }
            break;
        case d:
            if(y+1<height&&data[x][y+1]==0) y++;
            else{
                changedir();
                ahead();
            }
            break;
    }
}
int main()
{
    int M;
    scanf("%d",&M);
    int num[M];
    for(int i=0;i<M;i++) scanf("%d",num+i);
    sort(num,num+M,greater<int>());
    for(int i=1;i<=sqrt(M);i++) if(M%i==0) width=i;
    height=M/width;
    if(width<height) swap(width,height);
    data[x][y]=num[0];dir=d;
    for(int i=1;i<M;i++){
        ahead();
        data[x][y]=num[i];
    }
    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++)
            if(j!=height-1) printf("%d ",data[i][j]);
            else printf("%d\n",data[i][j]);
    system("pause");
    return 0;
}


原文地址:https://www.cnblogs.com/littlepage/p/11707703.html

时间: 2024-10-07 00:56:56

PAT Basic 1050 螺旋矩阵 (25 分)的相关文章

PTA乙级(*1050 螺旋矩阵 (25分))

1050 螺旋矩阵 (25分) https://pintia.cn/problem-sets/994805260223102976/problems/994805275146436608 https://paste.ubuntu.com/p/Dn7fQ9Gf73/ #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <cmath>

1050 螺旋矩阵 (25分)

VS2019堆栈溢出---定义了过大的数组,运行程序弹出chkstk.asm的解决方法 用new定义数组 首先要算出合适的m,n--行.列数 附:几个特殊的测试点,输入3个数.27个数.11个数 然后new一个二维数组,将给出的数套进去, i=0;j=0;光标先向右,再向下,再向左,再向上,再向右...如何循环 给出四周的边界数--top = 0, left = -1, right = n, down = m; 再给出当前的轨迹方向-- r = 1, l = 0, up = 0, d = 0;

1050. 螺旋矩阵(25) pat乙级题

本题要求将给定的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

1050. 螺旋矩阵(25)

本题要求将给定的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

pat乙级1050螺旋矩阵

1.用vector建立二维数组: 1 vector<vector<int>> arr(rows); 2 for (int i = 0; i < rows; i++) 3 arr[i].resize(cols); 或: 1 vector<vector<int>> v(m, vector<int>(n)); 2.当数组已初始化但某些下标还未赋值时,此下标对应的变量为NULL(见34行) 代码: 1 #include <iostream&g

PAT Basic 1030 完美数列 (25 分)

给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤)是输入的正整数的个数,p(≤)是给定的参数.第二行给出 N 个正整数,每个数不超过 1. 输出格式: 在一行中输出最多可以选择多少个数可以用它们组成一个完美数列. 输入样例: 10 8 2 3 20 4 5 1 6 7 8 9 输出样例: 8

PAT Basic 1065 单身狗 (25 分)

“单身狗”是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数:随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔:之后给出一个正整数 M(≤ 10 000),为参加派对的总人数:随后一行给出这 M 位客人的 ID,以空格分隔.题目保证无人重婚或脚踩两条船. 输出格式: 首先第一

[PAT Basic] 1015 德才论 (25 分)

思路 根据题意,首先创建对应结构体,分别定义四个vector,根据提交逐个push, 重点是sort比较函数的逻辑,然后对每个vector排序输出 cpp #include <iostream> #include <string> #include <algorithm> #include <vector> using namespace std; int n, l, h, suc = 0; typedef struct stu { int id; int

PAT 1050. 螺旋矩阵

PAT 1050. 螺旋矩阵 本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m-n取所有可能值中的最小值. 输入格式: 输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数.所有数字不超过104,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行n个数字,共m行.相邻数字以1个空格分隔,行末不得有多余空格.