输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。
请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2,
3,”),每个矩阵输出完成后记得换行
3 3 1 2 3 4 5 6 7 8 9 -1 -1
1,2,3,6,9,8,7,4,5
M,N为正整数且 M*N<=300000
//此为一个笨办法
//先以(优先级:右下左上)运动;
//然后打一个补丁:当运动到一个方向时,优先按照该方向运动
//(笑)
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
static StringBuilder pt = new StringBuilder();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int m = in.nextInt();
int n = in.nextInt();
if (m == -1 && n == -1) {
break;
}
//存储
int[][] num = new int[m][n];
for (int i = 0 ; i < m ; i++) {
for (int j = 0 ; j < n ; j++) {
num[i][j] = in.nextInt();
}
}
//当前要输出的坐标
int x = 0, y = 0;
//adws,控制方向
char direction = 'd';
do {
pt.append(num[x][y]);
num[x][y] = -1;
//优先沿袭之前的方向
if ('d' == direction || 'a' == direction){
int size = fixLeftRight(num, x, y, m, n);
if (size == 0){
}else{
y += size;
continue;
}
}else{
int size = fixUpDown(num, x, y, m, n);
if (size == 0){
}else{
x += size;
continue;
}
}
//开始转向
//将-1作为结束标志,输出后数据转为-1
if (y + 1 != n && num[x][y + 1] != -1) {
y++;direction = 'd';
pt.append(",");
} else if (x + 1 != m && num[x + 1][y] != -1 ) {
x++;direction = 's';
pt.append(",");
} else if (y != 0 && num[x][y - 1] != -1) {
y--;direction = 'a';
pt.append(",");
} else if (x != 0 && num[x - 1][y] != -1) {
x--;direction = 'w';
pt.append(",");
} else {
System.out.println(pt.toString());
pt = new StringBuilder();
break;
}
} while (true);
}
}
public static int fixUpDown(int[][] num, int x, int y, int m, int n) {
if (x + 1 != m && num[x + 1][y] != -1 ) {
pt.append(",");
return 1;
}
if (x != 0 && num[x - 1][y] != -1) {
pt.append(",");
return -1;
}
return 0;
}
public static int fixLeftRight(int[][] num, int x, int y, int m, int n) {
if (y + 1 != n && num[x][y + 1] != -1) {
pt.append(",");
return 1;
}
if (y != 0 && num[x][y - 1] != -1) {
pt.append(",");
return -1;
}
return 0;
}
} /*
offer原题:
https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(br.ready()) {
String[] s = br.readLine().split(" ");
int m = Integer.parseInt(s[0]);
int n = Integer.parseInt(s[1]);
if(m == -1 && n == -1) break;
int[][] matrix = new int[m][n];
for(int i = 0; i < m; i++) {
String[] temp = br.readLine().split(" ");
for(int j = 0; j < n; j++)
matrix[i][j] = Integer.parseInt(temp[j]);
}
printMatrix(matrix, m, n);
}
}
public static void printMatrix(int[][] matrix,int row,int col) {
//创建StringBuffer存储,因为有,号
StringBuilder sb = new StringBuilder();
if(matrix==null || row == 0 || col == 0)return;
//记录圈数
int start = 0;
//其他人的方法
start = (Math.min(col,row)-1)/2+1;//确定需要的层数
for(int i = 0;i < start;i++){
//从左到右打印
for(int k = i;k<col-i;k++)
sb.append(matrix[i][k]+",");;
//从右上到右下
for(int j=i+1;j<row-i;j++)
sb.append(matrix[j][col-i-1] + ",");
//从右到左
for(int k=col-i-2;(k>=i)&&(row-i-1!=i);k--)
sb.append(matrix[row-i-1][k] + ",");
//从左下到左上
for(int j=row-i-2;(j>i)&&(col-i-1!=i);j--)
sb.append(matrix[j][i] + ",");
}
//输出,记得去掉最后一个“,”
System.out.println(sb.substring(0,sb.length()-1));
}
} import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @Author: coderjjp
* @Date: 2020-05-07 15:02
* @Description:
* @version: 1.0
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while (!(str = br.readLine()).equals("-1 -1")){
String[] s = str.split(" ");
int m = Integer.valueOf(s[0]);
int n = Integer.valueOf(s[1]);
int arr[][] = new int[m][n];
for (int i = 0; i < m; i++){
s = br.readLine().split(" ");
for (int j = 0; j < n; j++)
arr[i][j] = Integer.valueOf(s[j]);
}
int l=0, r=n-1, t=0, b=m-1;
StringBuilder sb = new StringBuilder();
while (l<=r && t<=b){
for (int i=l;i<=r;i++)
sb.append(arr[t][i]).append(",");
t++;
if (t>b)
break;
for (int i=t;i<=b;i++)
sb.append(arr[i][r]).append(",");
r--;
if (l>r)
break;
for (int i=r;i>=l;i--)
sb.append(arr[b][i]).append(",");
b--;
if (t>b)
break;
for (int i=b;i>=t;i--)
sb.append(arr[i][l]).append(",");
l++;
if (l>r)
break;
}
System.out.println(sb.deleteCharAt(sb.length()-1));
}
}
} //Java AC 100%
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(br.ready()) {
String[] s = br.readLine().split(" ");
int m = Integer.parseInt(s[0]);
int n = Integer.parseInt(s[1]);
if(m == -1 && n == -1) break;
int[][] matrix = new int[m][n];
for(int i = 0; i < m; i++) {
String[] temp = br.readLine().split(" ");
for(int j = 0; j < n; j++)
matrix[i][j] = Integer.parseInt(temp[j]);
}
printMatrix(matrix, m, n);
}
}
private static void printMatrix(int[][] mat, int rows, int cols) {
if(mat == null || rows == 0 || cols == 0) return;
StringBuilder sb = new StringBuilder();
int min = Math.min(rows, cols);
for(int s = 0; 2*s < min; s++) {
int endRow = rows-1-s;
int endCol = cols-1-s;
for(int j = s; j <= endCol; j++) //直接打印第一行
sb.append(mat[s][j]+",");
if(endRow > s) { //存在第二行的条件
for(int i = s+1; i <= endRow; i++)
sb.append(mat[i][endCol]+",");
if(endCol > s) { //存在第三行的条件
for(int j = endCol-1; j >= s; j--)
sb.append(mat[endRow][j]+",");
if(endRow > s+1) { //存在第四行的条件
for(int i = endRow-1; i > s; i--)
sb.append(mat[i][s]+",");
}
}
}
}
//打印
System.out.println(sb.substring(0,sb.length()-1));
}
}