C语言 · 回形取数

基础练习 回形取数

时间限制: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 3 2 5

样例输入

3 2
1 2
3 4
5 6

样例输出

1 3 5 6 4 2

 1 #include<stdio.h>
 2 int main(){
 3     int m,n;
 4     scanf("%d%d",&m,&n);
 5     int a[m][n];
 6     //输入矩阵
 7     for(int i=0;i<m;i++){
 8         for(int j=0;j<n;j++){
 9             scanf("%d",&a[i][j]);
10         }
11     }
12     int sum=m*n;//矩阵中数的总数
13     int i,j;
14     i=-1;
15     j=0;
16     while(sum){
17         //首先向下走:列数不变,行数+1
18         //终止条件:无路可走或已经取过
19         while(a[++i][j]!=-1 && i<m){
20             printf("%d ",a[i][j]);//输出取到的数
21             a[i][j]=-1;//取过后将该位置值置为-1
22             sum--;//每取出一个数,总数减1
23         }
24         i--;//回到当前行,因为前面的++i,让i大了一个
25
26         //向下走不通了左转就向右走:行数不变,列数+1
27         while(a[i][++j]!=-1 && j<n){
28             printf("%d ",a[i][j]);
29             a[i][j]=-1;
30             sum--;
31         }
32         j--;//回到当前列,因为前面的++j,让j大了一个
33
34         //向右走不通了左转就向上走 : 列数不变,行数-1
35         //终止条件:无路可走或已经取过
36         while(a[--i][j]!=-1 && i>=0){
37             printf("%d ",a[i][j]);//输出取到的数
38             a[i][j]=-1;//取过后将该位置值置为-1
39             sum--;//每取出一个数,总数减1
40         }
41         i++;//回到当前行,因为前面的--i,让i小了一个
42
43         //向上走不通了左转就向左走:行数不变,列数-1
44         while(a[i][--j]!=-1 && j>=0){
45             printf("%d ",a[i][j]);
46             a[i][j]=-1;
47             sum--;
48         }
49         j++;//回到当前列,因为前面的--j,让j小了一个
50     }
51 }
时间: 2024-08-24 12:29:06

C语言 · 回形取数的相关文章

[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

蓝桥杯 基础练习 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

基础练习 回形取数

问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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

[蓝桥杯][基础练习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

基础训练 回形取数

回形取数 /*逆时针读数,但每读过一个就标志已读*/ #include<iostream> #include<vector> using namespace std; int main(){ int m, n, cnt=1, x=0, y=0, flag=0; cin>>m>>n; vector<vector<int> > M(m, vector<int>(n, 0)), visited(m, vector<int&

回形取数

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

报表性能优化方案之报表取数

1. 取数原理 设计器拼出最终的SQL,将SQL语句传给数据库,数据库执行,将数据返回给设计器. 由于计算过程首先要通过SQL语句从数据库中取数据,我们可以通过控制数据量的大小和对数据的提前预处理来提高报表的性能.下面是一些优化的方法. 2. 优化SQL FineReport报表的数据集采用的是表模型,也就是说通过SQL这种DSL语言,从数据库通过简单查询或各种组合关联查询得到一个关系表,而这部分SQL查询根据各种数据库产商长时间的优化(比如建立索引),已经非常成熟.数据集一般要通过FineRe

报表开发FineReport优化报表取数

报表开发FineReport优化报表取数 1. 取数原理 设计器拼出最终的SQL,将SQL语句传给数据库,数据库执行,将数据返回给设计器. 由于计算过程首先要通过SQL语句从数据库中取数据,我们可以通过控制数据量的大小和对数据的提前预处理来提高报表的性能.下面是一些优化的方法. 2. 优化SQL FineReport报表的数据集采用的是表模型,也就是说通过SQL这种DSL语言,从数据库通过简单查询或各种组合关联查询得到一个关系表,而这部分SQL查询根据各种数据库产商长时间的优化(比如建立索引),

BW 业务模型关系与主数据取数

在接到业务需求之后,我认为重要的是理清楚自己该做什么.来实现业务.由于不了解业务,还是走了很多弯路.本可以不用这么做,还是这么做了.自然你最傻瓜的按照用户的方式去实现是没有问题的. 会使后面的人难以维护,可以精简的流程也变的复杂.冗余很多.那目前还不是我的层次,达不到.只能按照用户的想法去做. 因为是BW ON HANA 系统.能在BW 里将数据处理好 就在BW, 在HANA 视图里做简单的JOIN  . WEBI 里复杂的逻辑判断做展示.没有什么绝对.看那个好做.我所掌握大体如此. BW 里是