[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 3 2 5

样例输入

3 2

1 2

3 4

5 6

样例输出

1 3 5 6 4 2

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		while (scanner.hasNext()) {
			int m = scanner.nextInt();
			int n = scanner.nextInt();

			int[][] flag = new int[m][n];// 标记路径
			int[][] nums = new int[m][n];// 记录数据

			for (int i = 0; i < m; i++) {
				for (int j = 0; j < n; j++) {
					nums[i][j] = scanner.nextInt();
				}
			}

			int count = m * n;
			int i = 0, j = 0;

			while (count > 0) {
				while (i < m && flag[i][j] == 0) {
					System.out.print(nums[i][j]);
					System.out.print(--count == 0 ? "\r\n" : " ");
					flag[i][j] = 1;
					i++;
				}
				i--;
				j++;

				while (j < n && flag[i][j] == 0) {
					System.out.print(nums[i][j] + " ");
					System.out.print(--count == 0 ? "\r\n" : " ");
					flag[i][j] = 1;
					j++;
				}
				j--;
				i--;

				while (i > -1 && flag[i][j] == 0) {
					System.out.print(nums[i][j] + " ");
					System.out.print(--count == 0 ? "\r\n" : " ");
					flag[i][j] = 1;
					i--;
				}
				i++;
				j--;

				while (j > -1 && flag[i][j] == 0) {
					System.out.print(nums[i][j] + " ");
					System.out.print(--count == 0 ? "\r\n" : " ");
					flag[i][j] = 1;
					j--;
				}
				j++;
				i++;
			}
		}
	}
}

[BASIC-25] 回形取数,布布扣,bubuko.com

时间: 2024-10-26 01:32:58

[BASIC-25] 回形取数的相关文章

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

C语言 &#183; 回形取数

基础练习 回形取数 时间限制: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我设计了三种算

hdu 1565 方格取数(2)(网络流之最大点权独立集)

题目链接:hdu 1565 方格取数(2) 题意: 有一个n*m的方格,每个方格有一个数,现在让你选一些数.使得和最大. 选的数不能有相邻的. 题解: 我们知道对于普通二分图来说,最大独立点集 + 最小点覆盖集 = 总点数,类似的,对于有权的二分图来说,有: 最大点权独立集 + 最小点权覆盖集 = 总点权和, 这个题很明显是要求 最大点权独立集 ,现在 总点权 已知,我们只要求出来 最小点权覆盖集 就好了,我们可以这样建图, 1,对矩阵中的点进行黑白着色(相邻的点颜色不同),从源点向黑色的点连一

HDU 1569 - 方格取数(2) - [最大点权独立集与最小点权覆盖集]

嗯,这是关于最大点权独立集与最小点权覆盖集的姿势,很简单对吧,然后开始看题. HDU1569: Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 给你一个m*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大. Input 包括多个测试实例,

P1004 方格取数

P1004 方格取数 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . B 某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角