您的位置:首页 > 其它

基础练习 回形取数

2016-03-22 16:52 281 查看
基础练习 回形取数

时间限制: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
----------
超时了。。。

附上一组测试数据 https://yunpan.cn/cY4JzEqmTSWvA 访问密码 9718
-----------------

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int m=input.nextInt(),n=input.nextInt();
int arr[][]=new int[m]
;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
arr[i][j]=input.nextInt();
}
}
int i=0,j=0;
for (i = 0; i < (n + 1) / 2 && i < (m + 1) / 2; i++)
{
for (j = i; j < m - i; j++)
System.out.print(arr[j][i]+" ");
for (j = i + 1; j < n - i; j++)
System.out.print(arr[m - i - 1][j]+" ");
if (n - i - 1 > i)
for (j = m - i - 2; j >= i; j--)
System.out.print( arr[j][n - i - 1]+" ");
if (m - i - 1 > i)
for (j = n - i - 2; j > i; j--)
System.out.print( arr[i][j]+" ");
}
}
}


--------------

C语言通过
---------------

#include <stdio.h>

int main()
{
int m,n,i,j;
int arr[210][210];
scanf("%d%d",&m,&n);

for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
scanf("%d",&arr[i][j]);

for(i = 0; i < (m+1)/2 && i < (n+1)/2; i++)
{
for(j = i; j < m-i; j++)
printf("%d ",arr[j][i]);
for(j = i+1; j < n-i; j++ )
printf("%d ",arr[m-i-1][j]);
if(n-i-1 > i)
{
for(j = m-i-2; j >= i; j--)
printf("%d ",arr[j][n-i-1]);
}
if (m-i-1 > i)
{
for(j = n-i-2; j > i; j--)
printf("%d ",arr[i][j]);
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: