2017华为实习机试题(java)

来源:互联网 发布:免费服务器防火墙软件 编辑:程序博客网 时间:2024/06/05 16:05

题目1:

   编写一个reverseadd函数,实现两个数倒置后再求和的功能,比如输入123,456就是求321+654,输出975

   注意输入100,200输出3,(自动去除开头的0),超过范围输出-1

   思路:

   输入数据带空格,先切割出整数,然后用stringbuidler翻转,转成数字自动去除0,求和,全程自带的函数.

import java.util.Scanner;public class reverseadd {  public static int reversedAdd(int a,int b){  if ((a<1)||(a>700000)||(b<1)||(b>700000))  return -1;  String A=Integer.toString(a);  String B=Integer.toString(b);  StringBuilder c=new StringBuilder(A);  StringBuilder d=new StringBuilder(B);  c=c.reverse();  d=d.reverse();  int e=Integer.valueOf(c.toString());  int f=Integer.valueOf(d.toString());  return e+f;  }  public static void main(String[] args) {Scanner cin=new Scanner(System.in);while(cin.hasNext()){String s=cin.next();String c[]=s.split(",");//System.out.println(c[0]);System.out.println(reversedAdd(Integer.valueOf(c[0]),Integer.valueOf(c[1])));}cin.close();}}

题目2:

掷骰子,初始序列1,2,3,4,5,6分别代表左,右,前,后,上,下

输入翻转序列,保证只包含L,R,F,B,A,C

L:向左翻转

R:向右翻转

F:向前翻转

B:向后翻转

A:逆时针翻转

C:顺时针翻转

输出最终序列

比如

输入

LA

输出

435621

思路直接开数组模拟,只需要模拟前,左,顺时针三个状态,其他的由这些翻转3次得到.

import java.util.Scanner;public class 掷骰子 {private static int  state[]={1,2,3,4,5,6};public static void left(){//向左旋转    int temp1=state[0];    int temp2=state[1];    state[0]=state[4];    state[1]=state[5];    state[4]=temp2;    state[5]=temp1;}public static void right(){//向右旋转int temp1=state[0];int temp2=state[1];state[0]=state[5];state[1]=state[4];state[4]=temp1;state[5]=temp2;   }public static void f(){//向前翻转int temp1=state[2];int temp2=state[3];state[2]=state[4];state[3]=state[5];state[5]=temp1;state[4]=temp2;}public static void c(){//顺时针旋转int temp1=state[0];int temp2=state[1];state[0]=state[2];state[1]=state[3];state[2]=temp2;state[3]=temp1;}public static void  cal(char s[]){for (int i=0;i<s.length;i++){if (s[i]=='L'){left();}if (s[i]=='R'){right();}if (s[i]=='F'){f();}if (s[i]=='B'){f();f();f();}if (s[i]=='A'){c();c();c();}if (s[i]=='C'){c();}}}  public static void main(String[] args) {Scanner cin=new Scanner(System.in);while(cin.hasNext()){state[0]=1;state[1]=2;state[2]=3;state[3]=4;state[4]=5;state[5]=6;String s=cin.next();char c[]=s.toCharArray();cal(c);for (int i=0;i<6;i++)System.out.print(state[i]);System.out.println();}cin.close();}}

题目3:

当出差遇上大雾

给定距离矩阵,大雾城市(既不能到达,也不能离开),目的地,输出最短路径和路径.

迪杰斯特拉结合path数组记录路径,path在迪杰斯特拉更新dis距离数组时更新.

大雾城市就是将距离矩阵变为1000

无法到达输出-1

import java.util.Scanner;public class 当出差遇上大雾 {   private static int [][]s=new int[6][6];   public static void init(){ s[0][0]=0; s[0][1]=2; s[0][2]=10; s[0][3]=5; s[0][4]=3; s[0][5]=1000; s[1][0]=1000; s[1][1]=0; s[1][2]=12; s[1][3]=1000; s[1][4]=1000; s[1][5]=10; s[2][0]=1000; s[2][1]=1000; s[2][2]=0; s[2][3]=1000; s[2][4]=7; s[2][5]=1000; s[3][0]=2; s[3][1]=1000; s[3][2]=1000; s[3][3]=0; s[3][4]=2; s[3][5]=1000; s[4][0]=4; s[4][1]=1000; s[4][2]=1000; s[4][3]=1; s[4][4]=0; s[4][5]=1000; s[5][0]=3; s[5][1]=1000; s[5][2]=1; s[5][3]=1000; s[5][4]=2; s[5][5]=0;   }   public static void main(String[] args) {Scanner cin=new Scanner(System.in);while(cin.hasNextInt()){    init();int end=cin.nextInt();//终点城市int a=cin.nextInt();//大雾城市if (a!=0){//处理距离矩阵 for (int i=0;i<6;i++)  s[i][a-1]=1000; for (int i=0;i<6;i++)  s[a-1][i]=1000;}int dis[]=new int[6];for (int i=0;i<6;i++)dis[i]=s[0][i];int book[]=new int[6];book[0]=1;int k=-1;int path[]=new int[6];path[0]=-1;for (int i=1;i<6;i++)if (dis[i]==1000)path[i]=-1;elsepath[i]=0;for (int i=0;i<5;i++){int min=1000;for (int j=0;j<6;j++){if ((book[j]==0)&&min>dis[j]&&dis[j]!=1000){min=dis[j];k=j;}} book[k]=1; if (k!=-1){for (int j=0;j<6;j++)if (dis[j]>dis[k]+s[k][j]){dis[j]=dis[k]+s[k][j];path[j]=k;}}}if (dis[end-1]==1000){System.out.println(1000);    System.out.println("[]");    continue;}else{System.out.println(dis[end-1]);k=end-1;int temp[]=new int[6];int num=0;    while(k!=-1){    temp[num++]=k;    k=path[k];    }    System.out.print("[");    for (int i=num-1;i>=1;i--)System.out.print(temp[i]+1+" ");    System.out.print(temp[0]+1+"]");    System.out.println();}}cin.close();}}






 

3 0
原创粉丝点击