程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [BASIC-25] 回形取數

[BASIC-25] 回形取數

編輯: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
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++;
			}
		}
	}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved