蓝桥杯-回形取数

简介: 回形取数

Problem Description:


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


1   2

↓   ↑

3   4

↓   ↑

5→6


Input:


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


Output:


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


Sample Input:


3 3

1 2 3

4 5 6

7 8 9


Sample Output:


1 4 7 8 9 6 3 2 5


解题思路:


按照顺序按四个方向去输出数字,注意每个方向输出的个数会发生变化。


程序代码:


#include<stdio.h>
int main()
{
  int i,j,m,n,a[201][201]={0};
  scanf("%d %d",&m,&n);
  for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
      scanf("%d",&a[i][j]);
  int k=1,sum=m*n;
  i=1,j=1;
  printf("%d ",a[1][1]);
  a[1][1]=-1;
  while(k<sum)
  {
    while(i+1<=m&&a[i+1][j]!=-1)
    {
      printf("%d ",a[++i][j]);
      a[i][j]=-1;
      k++;
    }
    while(j+1<=n&&a[i][j+1]!=-1)
    {
      printf("%d ",a[i][++j]);
      a[i][j]=-1;
      k++;
    }
    while(i-1>0&&a[i-1][j]!=-1)
    {
      printf("%d ",a[--i][j]);
      a[i][j]=-1;
      k++;
    }
    while(j-1>0&&a[i][j-1]!=-1)
    {
      printf("%d ",a[i][--j]);
      a[i][j]=-1;
      k++;
    }
  }
  return 0;
}


相关文章
|
6月前
|
Java C++ Python
试题 基础练习 回形取数
试题 基础练习 回形取数
32 0
摄影测量学:课后练习总结2
摄影测量学:课后练习总结2
239 0
摄影测量学:课后练习总结2
|
4月前
|
人工智能
【洛谷】P2440 木材加工
洛谷 P2440 木材加工
61 0
【洛谷】P2440 木材加工
|
6月前
【错题集-编程题】活动安排(贪心 - 区间)
【错题集-编程题】活动安排(贪心 - 区间)
|
6月前
|
Java 程序员 C++
日志统计(蓝桥杯每日一题)
日志统计(蓝桥杯每日一题)
51 1
|
人工智能 Go
树状数组(包教包会,不会抽我)
树状数组(包教包会,不会抽我)
66 0
|
机器学习/深度学习 算法
蓝桥杯-回形取数
蓝桥杯-回形取数
77 0
|
算法 程序员
[蓝桥杯 2018 省 B] 日志统计——双指针算法
[蓝桥杯 2018 省 B] 日志统计——双指针算法
76 0
|
程序员
【蓝桥杯基础题】2018年省赛—日志统计
【蓝桥杯基础题】2018年省赛—日志统计
【蓝桥杯基础题】2018年省赛—日志统计