华为机时可以用java吗_2017华为实习机试题(java)

题目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

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;

else

path[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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值