[蓝桥杯][基础练习VIP]回形取数

时间限制: 1Sec 内存限制: 128MB 提交: 128 解决: 34

题目描述

回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。

输入

输入第一行是两个不超过200的正整数m,  n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。

输出

输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。

样例输入

3  3 

1  2  3 

4  5  6 

7  8  9 

样例输出

1 4 7 8 9 6 3 2 5有两种写法,但是第一种不知道为啥出错了,真是让人感到难过,第一个是是利用下标,第二种是使用-1标记访问过的位置。
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int m,n,cnt;
int a[201][201];
int b[201*201];
int main(void)
{
    int i,j;
    scanf("%d%d",&m,&n);
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    int L=1,R=n,X=1,Y=m;
    i=j=1;
    while( i>=X && i<=Y && j>=L && j<=R )
    {
        while(i<=Y)
        {
            b[cnt++]=a[i][j];
            i++;
        }
        i--; L++; j++;
        while(j<=R)
        {
            b[cnt++]=a[i][j];
            j++;
        }
        j--; Y--; i--;
        while(i>=X)
        {
            b[cnt++]=a[i][j];
            i--;
        }
        i++; R--; j--;
        while(j>=L)
        {
            b[cnt++]=a[i][j];
            j--;
        }
        j++; X++; i++;
    }
    for(int i=0;i<cnt;i++)
    {
        printf("%d",b[i]);
        if(i!=cnt-1) printf(" ");
    }
    return 0;
}
#include<cstdio>
using namespace std;
const int maxn = 210;
int A[maxn][maxn],B[maxn*maxn];

int main(void)
{
    int n,m;
    scanf("%d%d",&m,&n);
    for(int i=1;i<=m;i++)
    for(int j=1;j<=n;j++)
    scanf("%d",&A[i][j]);
    int t=0;
    int i=0,j=1;
    while(t<m*n)
    {
        while(i+1<=m && A[i+1][j]!=-1)
        {
            B[++t]=A[i+1][j];
            A[i+1][j]=-1;
            i++;
        }
        while(j+1<=n && A[i][j+1]!=-1)
        {
            B[++t]=A[i][j+1];
            A[i][j+1]=-1;
            j++;
        }
        while(i-1>=1 && A[i-1][j]!=-1)
        {
            B[++t]=A[i-1][j];
            A[i-1][j]=-1;
            i--;
        }
        while(j-1>=1 && A[i][j-1]!=-1)
        {
            B[++t]=A[i][j-1];
            A[i][j-1]=-1;
            j--;
        }
    }
    for(int i=1;i<=t;i++)
    {
        printf("%d",B[i]);
        if(i!=t) printf(" ");
    }
}

原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8893749.html

时间: 2024-11-09 11:15:03

[蓝桥杯][基础练习VIP]回形取数的相关文章

蓝桥杯 基础练习 BASIC-25 回形取数

基础练习 回形取数 时间限制:1.0s   内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每行n个整数,表示这个矩阵. 输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果.数之间用一个空格分隔,行末不要有多余的空格. 样例输入 3 31 2 34 5 67 8 9 样例输出 1 4 7 8 9 6 3

蓝桥杯 基础练习 特殊回文数

基础练习 特殊回文数 时间限制:1.0s   内存限制:512.0MB 问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输入一行,包含一个正整数n. 输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行. 样例输入 52 样例输出 899998989989998899 数据规模和约定 1<=n<=54. #include<stdio.h> #include

蓝桥杯基础练习--特殊回文数

问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输入一行,包含一个正整数n. 输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行. 样例输入 52 样例输出 899998989989998899 数据规模和约定 1<=n<=54. #include<iostream> using namespace std; int main() { int arr[1

[蓝桥杯][基础练习VIP]Huffuman树

时间限制: 1Sec 内存限制: 128MB 提交: 61 解决: 43 题目描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0,  p1,  -,  pn-1},用这列数构造Huffman树的过程如下: 1.  找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中.这个过程的费用记为pa  +  pb. 2.  重复步骤1,直到{pi}中只剩下一个数. 在上面的操作过程中

[蓝桥杯][基础练习VIP]矩阵乘法

时间限制: 1Sec 内存限制: 128MB 提交: 113 解决: 30 题目描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A  = 1  2 3  4 A的2次幂 7  10 15  22 输入 第一行是一个正整数N.M(1< =N< =30,  0< =M< =5),表示矩阵A的阶数和要求的幂数 接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 输出 输出共N行,每行N个整数,表示A的M次幂所对应的矩阵.相邻的数之间用一个空格隔开 样例输入

蓝桥杯- 基础练习:回文数

public class Main { public static void main(String[] args) { for (int i = 1000; i < 10000; i++) { if ((i/1000)==(i%10)&&(i/100%10)==(i/10%10)) { System.out.println(i); } } } } 原文地址:https://www.cnblogs.com/wzqjy/p/8280594.html

[蓝桥杯][基础练习VIP]2n皇后问题

时间限制: 1Sec 内存限制: 128MB 提交: 26 解决: 18 题目描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一条对角线上.问总共有多少种放法?n小于等于8. 输入 输入的第一行为一个整数n,表示棋盘的大小. 接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后. 输

基础练习 回形取数

问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每行n个整数,表示这个矩阵. 输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果.数之间用一个空格分隔,行末不要有多余的空格. 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 8 9 6 3 2 5 样例输入 3 2 1 2 3 4 5 6 样例输出 1

[BASIC-25] 回形取数

基础练习 回形取数 时间限制:1.0s   内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每行n个整数,表示这个矩阵. 输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果.数之间用一个空格分隔,行末不要有多余的空格. 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 8 9 6