P1050 螺旋矩阵

转跳点:

1050 螺旋矩阵 (25分)

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

输入格式:

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

输出格式:

输出螺旋矩阵。每行 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

这道题啊,模拟的我好苦啊,我第一波模拟错了3个,打死也就没改出来了,干脆推了重写了一遍,AC了,狗啊,这么AC的都不知道,哭死

这道题没什么好说的,就是碰壁模拟,上下左右四个边界,碰到就转向就可以了。哦,题目说了非递增顺序,记得降序排序哦~

我第一次的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h> int matrixsize(int n);
int cmp(const void *a, const void *b) { return (*(int *)a) < (*(int *)b) ? 1 : -1; } int arr[10000], Matrix[10000][1000]; int main(void)
{
int size, n, m;
scanf("%d", &size);
m = matrixsize(size);
n = size / m; for (int i = 0; i < size; i++)
{
scanf("%d", &arr[i]);
} qsort(arr, size, sizeof(arr[0]), cmp); int up = -1, down = m, left = -1, right = n;
int i = 0, j = 0, index = 0;
while (index < size)
{
//向右填充
while (j < right)
{
Matrix[i][j] = arr[index++];
j++;
}
up++;
i++;
j--; //向下填充
while (i < down)
{
Matrix[i][j] = arr[index++];
i++;
}
right--;
i--;
j--; //向左填充
while (j > left)
{
Matrix[i][j] = arr[index++];
j--;
}
down--;
i--;
j++; //向上填充
while (i > up)
{
Matrix[i][j] = arr[index++];
i--;
}
left++;
i++;
j++;
} for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d%s", Matrix[i][j], n - 1 == j ? "" : " ");
}
putchar('\n');
} return 0;
} //矩阵的行
int matrixsize(int n)
{
int m;
m = (int)sqrt(n);
if (m - sqrt(n) == 0)
{
return m;
}
m++;
while (0 != n % m)
{
m++;
}
return m;
}

真的是打死也想不出来了,试了5*5, 4*3 ,6*5, 10*10各种,没看出哪错了,模拟题就是恶心……

AC代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h> int matrixsize(int n);
int cmp(const void *Matrix, const void *b) { return (*(int *)Matrix) < (*(int *)b) ? 1 : -1; } int arr[10000], Matrix[10000][1000]; int main(void)
{
int size, n, m;
scanf("%d", &size);
m = matrixsize(size);
n = size / m; for (int i = 0; i < size; i++)
{
scanf("%d", &arr[i]);
} qsort(arr, size, sizeof(arr[0]), cmp); Matrix[1][1] = arr[0];
int index = 0;
int i = 1, j = 1; //前面已经存了一个了
while (index < size - 1)
{//上下左右四个边界,这次利用了存储值非0的特性,因为上一次有一个越界干脆从1开始
while (j + 1 <= n && !Matrix[i][j + 1])
{
Matrix[i][++j] = arr[++index];
}
while (i + 1 <= m && !Matrix[i + 1][j])
{
Matrix[++i][j] = arr[++index];
}
while (j - 1 > 0 && !Matrix[i][j - 1])
{
Matrix[i][--j] = arr[++index];
}
while (i - 1 > 0 && !Matrix[i - 1][j])
{
Matrix[--i][j] = arr[++index];
}
} for (i = 1; i <= m; i++)
{
for (j = 1; j <= n; j++)
{
printf("%d%s", Matrix[i][j], n == j ? "" : " ");
}
putchar('\n');
} return 0;
} //矩阵的行
int matrixsize(int n)
{
int m;
m = (int)sqrt(n);
if (m - sqrt(n) == 0)
{
return m;
}
m++;
while (0 != n % m)
{
m++;
}
return m;
}

PTA不易,诸君共勉!

P1050 螺旋矩阵的更多相关文章

  1. PAT 1050. 螺旋矩阵(25)

    本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...

  2. leetcode-Spiral Matrix II 螺旋矩阵2之python大法好,四行就搞定,你敢信?

    Spiral Matrix II 螺旋矩阵 Given an integer n, generate a square matrix filled with elements from 1 to n2 ...

  3. Java-基础编程(螺旋矩阵&乘法表)

    package cn.rick.study; import java.io.BufferedReader;import java.io.InputStreamReader;import java.ut ...

  4. NOIP 2014 普及组 T3 螺旋矩阵

    [题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...

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

    1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...

  6. NOIP2014-普及组复赛-第三题-螺旋矩阵

    题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵 ...

  7. LeetCode 59. Spiral Matrix II (螺旋矩阵之二)

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

  8. LeetCode 54. Spiral Matrix(螺旋矩阵)

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  9. Code Kata:螺旋矩阵 javascript实现

    1 2 3 4  5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9  如图所示,就是一个5*5的螺旋矩阵 我的思路如下: 第一步:拆分 ...

随机推荐

  1. Android。WebView加载UR请求使用Cookie储存User_Id记录用户是否登陆过

    1.WebView初始化的时候用倒如下代码: if (Build.VERSION.SDK_INT >= 21) { CookieManager.getInstance().setAcceptTh ...

  2. cookie、 Session Storage 、 Local Storage

    问题描述: 使用Ajax, Controller 传回来 JSON 字符串(待处理的信息) 在 Ajax 中实现页面跳转 window.location.href="/jsp/index.j ...

  3. Kafka 启动报错java.io.IOException: Can't resolve address.

    阿里云上 部署Kafka 启动报错java.io.IOException: Can't resolve address. 本地调试的,报错 需要在本地添加阿里云主机的 host 映射   linux ...

  4. Linux进程管理(二)

    目录 Linux进程管理(二) 参考 vmstat命令 top命令 Linux进程管理(二)

  5. Codeforces1307D. Cow and Fields

    对于本题,最短路,考虑bfs,那么我们可以跑2次bfs,求出每个点到1与n的最短路,设为x_a, x_b,那我们可以把问题转换成max(min{x_a+y_b,x_b+y_a}+1)(x,y属于1到n ...

  6. Docker如何使用nginx搭建tomcat集群

    首先创建tomcat的文件夹 , 为了方便docker的配置 我这里直接在根目录中创建 第一步:创建文件夹:发布文件夹 mkdir -p /docker/tomcat/webapp8081 mkdir ...

  7. 中山DAy2——普及

    今天挺不友好的,早上忘记定闹钟,晚了半小时起床,然后早上信心满满打算弄他个300分.结果……132.2分·.WTF??? T1:disease 题意:有n头奶牛,k种细菌(k<=15),给你每头 ...

  8. 再论谭浩强《C语言程序设计》

    一些同学学不好C语言,把罪责归于“因为教材是谭浩强写的”实在是很滑稽. 谭浩强老先生 1934 年生,现在已经 80 岁了.他 1958 年从清华大学自动控制系毕业,那年 24 岁.要知道 C 语言那 ...

  9. 关于length、length()、size()

    length:属性,数组的属性. length(): String的方法,方法体里面是  return value.length; size():集合如list.set.map的方法,返回元素个数.

  10. classmethode,staticmethode

    目录 classmethod: staticmethod: 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法 而使用@staticmethod或@classmethod,就可以不需要实例化 ...