1.报时助手
* Copyright (C), 2015-2019
* FileName: Timer
* Author: zun
* Date: 2019/2/15 22:41
* Description: 报时助手
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
import java.util.HashMap;
import java.util.Scanner;
/**
* 〈一句话功能简述〉
* 〈报时助手〉
*
* @author zun
* @create 2019/2/15
* @since 1.0.0
*/
public class Timer {
public static void main(String[] args){
Scanner s=new Scanner(System.in);
HashMap<String,String> map=new HashMap<>();
map.put("0","zero");
map.put("1","one");
map.put("2","two");
map.put("3","three");
map.put("4","four");
map.put("5","five");
map.put("6","six");
map.put("7","seven");
map.put("8","eight");
map.put("9","nine");
map.put("10","ten");
map.put("11","eleven");
map.put("12","twelve");
map.put("13","thirteen");
map.put("14","fourteen");
map.put("15","fifteen");
map.put("16","sixteen");
map.put("17","seventeen");
map.put("18","eighteen");
map.put("19","nineteen");
map.put("20","twenty");
map.put("30","thirty");
map.put("40","forty");
map.put("50","fifty");
int hour=s.nextInt();
int mintue=s.nextInt();
if(mintue==0){
if(hour>20){
System.out.println(map.get(String.valueOf(hour/10*10))+" "+map.get(String.valueOf(hour%10))+" o'clock");
}
else{
System.out.println(map.get(String.valueOf(hour))+" o'clock");
}}
else{
if(hour>20){
if(mintue>20){
System.out.println(map.get(String.valueOf(hour/10*10))+" "+map.get(String.valueOf(hour%10))+" "+map.get(String.valueOf(mintue/10*10))+" "+map.get(String.valueOf(mintue%10)));
}
else{
System.out.println(map.get(String.valueOf(hour/10*10))+" "+map.get(String.valueOf(hour%10))+" "+map.get(String.valueOf(mintue)));
}
}
else{
if(mintue>20){
System.out.println(map.get(String.valueOf(hour))+" "+map.get(String.valueOf(mintue/10*10))+" "+map.get(String.valueOf(mintue%10)));
}
else{
System.out.println(map.get(String.valueOf(hour))+" "+map.get(String.valueOf(mintue)));
}
}
}
}
}
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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 input=new Scanner(System.in);
int m=input.nextInt(),n=input.nextInt();
int arr[][]=new int[m][n];
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]+" ");
}
}
}
自己还是没写出来 丢人啊我的想法是使用一个辅助的flag 数组但是在边界的时候又不太可用 然后网上的基本就是使用总的个数来进行记录是否完成遍历,然后再记录圈数,便于设定向各个方向移动的范围。
被自己菜哭了 不过这些方法都存在数据大时,运行超时的情况 也不知道如何优化,还是得好好钻研。
-----------------------
自己重新写了一下 方法,解决了数据过大时出现的运行超时的问题
/**
* Copyright (C), 2015-2019
* FileName: BackshapeNumber
* Author: zun
* Date: 2019/2/19 11:25
* Description: 回形取数
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
import java.util.Scanner;
/**
* 〈一句话功能简述〉
* 〈回形取数〉
*
* @author zun
* @create 2019/2/19
* @since 1.0.0
*/
public class BackshapeNumber {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int m=input.nextInt();
int n=input.nextInt();
int arr[][]=new int[m][n];
boolean flag[][]=new boolean[m+2][n+2];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
arr[i][j]=input.nextInt();
}
}
for(int i=0;i<m+2;i++){
for(int j=0;j<n+2;j++){
if(i==0||j==0||j==n+1||i==m+1){
flag[i][j]=false;
}
else{
flag[i][j]=true;}
}
}
int i=0,j=0;
int count=0;
while(count<(m*n)){
while(flag[i+1][j+1]){
flag[i+1][j+1]=false;
System.out.print(arr[i++][j]+" ");
count++;
}
i--;
j++;
while(flag[i+1][j+1]){
flag[i+1][j+1]=false;
System.out.print(arr[i][j++]+" ");
count++;
}
j--;
i--;
while(flag[i+1][j+1]){
flag[i+1][j+1]=false;
System.out.print(arr[i--][j]+" ");
count++;
}
i++;
j--;
while(flag[i+1][j+1]){
flag[i+1][j+1]=false;
System.out.print(arr[i][j--]+" ");
count++;
}
j++;
i++;
}
}
}