【算法】华为笔试_颠倒相加_掷骰子

来源:互联网 发布:java安装包百度云 编辑:程序博客网 时间:2024/06/01 09:37

1.将两个数翻转后相加,比如输入123,456 输出975。

这道题输入输出挺坑人,而且要求要调用reverseAdd()函数,具体还有什么不记得,很多同学都是在自己电脑上可以编译,但就是通不过,血的教训啊

我原本用的是JavaScript,输入是也没有注意到题目里用的是逗号分隔,一直通不过,还有个可能的原因是没有满足调用reverseAdd(),吐血

var readline = require('readline'); 
var rl = readline.createInterface(process.stdin, process.stdout);
 


 
rl.on('line', function (line){
    if(line.indexOf(" ")>0&& line.indexOf(" ")<line.length){
        var arr=line.split(" ");
        var a=arr[0],b=arr[1];


        if((a<1 || a > 7000) || (b < 1 || b > 70000)){
            console.log(-1);
        }
        else if(!(/(^[1-9]\d*$)/.test(a)))
            console.log(-1);
        else if(!(/(^[1-9]\d*$)/.test(b)))
             console.log(-1);
        else{
            var arra=a.split("");
            var arrb=b.split("");
            var newa=arra.reverse();
            var newb=arrb.reverse();
            var finala=parseInt(newa.join(""));
            var finalb=parseInt(newb.join(""));
            var result=finala+finalb;
            console.log(result);


        }
    }
    else
        console.log(-1);
});
 
rl.on('close', function() { 
 process.exit(0);
});



修改后的js代码,修改了我犯得逗号的错误,添加了函数reverseAdd()不知道能不能通过:

var readline = require('readline'); 
var rl = readline.createInterface(process.stdin, process.stdout);
 


 
rl.on('line', function (line){
    if(line.indexOf(",")>0&& line.indexOf(",")<line.length){
        var arr=line.split(",");
        var a=arr[0],b=arr[1];
        console.log(a+b);
        if((a<1 || a > 7000) || (b < 1 || b > 70000)){
            console.log(-1);
        }
        else{
            var arra=a.split("");
            var arrb=b.split("");
            console.log(reverseAdd(arra,arrb));
        }
    }
    else
        console.log(-1);
});


function reverseAdd(a,b){
    var newa=a.reverse();
    var newb=b.reverse();
    var finala=parseInt(newa.join(""));
    var finalb=parseInt(newb.join(""));
    var result=finala+finalb;
    return result;
}
 
rl.on('close', function() { 
 process.exit(0);
});


这里再附上同学通过了的Java代码!

public class reverseAdd {
public static int reverseAdd(int a, int b) {
if (a > 70000 || b > 70000 || a < 1 || b < 1)
return -1;
int res = 0;
int a1=reverse(a);
int b1=reverse(b);
res=a1+b1;
return res;
}

public static int reverse(int a){
int temp=0;
while(a!=0){
temp=temp*10+a%10;
a=a/10;
}
return temp;

}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s=in.nextLine();
           String[] s1=s.trim().split(",");
           int a=Integer.valueOf(s1[0]);
           int b=Integer.valueOf(s1[1]);
           System.out.println(reverseAdd(a,b));
}
}



2.掷骰子

题目的大概意思就是有一个骰子,他的正面是3,左边是1,右边是2,背面是4,顶部是5,底部是6,当输入R为向右翻转90度,L为向左翻转90度,F为向前,B为向后,A为顺时针,C为逆时针(此处为俯视骰子)。初始序列为1,2,3,4,5,6,输入RLFBAC中任意字母后,可以连续重复输入,序列是什么


JavaScript代码

var readline = require('readline'); 
var rl = readline.createInterface(process.stdin, process.stdout);
 


 
rl.on('line', function (line){
    var str=line.trim().split("");
    var arr=[1,2,3,4,5,6];   //存放初始位置
    var temp=0;
    if(str.length<=50){
        for(var i=0;i<str.length;i++){
            switch(str[i]){
                case "R" :  change(arr,0,4);change(arr,0,1);change(arr,0,5);
                            break;
                case "L" :  change(arr,0,5);change(arr,0,1);change(arr,0,4);
                            break;
                case "B" : change(arr,2,5);change(arr,4,5);change(arr,3,5);
                            break;
                case "F" :  change(arr,2,4);change(arr,4,3);change(arr,3,5);
                            break;
                case "A" :  change(arr,0,3);change(arr,2,3);change(arr,1,3);
                            break;
                case "C" :  change(arr,0,2);change(arr,2,1);change(arr,1,3);
                            break;
               


            }
        }
        console.log(arr.join(""));
    }


});


function change(arr,a,b){
    var temp=0;
    temp=arr[a];
    arr[a]=arr[b];
    arr[b]=temp;
}
rl.on('close', function() { 
 process.exit(0);
});


同学写的java代码

public class SZ {
static String[] ch = { "1", "2", "3", "4", "5", "6" };


public static void reverse(String[] c, String s) {
switch (s) {
case "L":
change(c, 0, 5);
change(c, 1, 4);
change(c, 0, 1);
break;
case "R":
change(c, 0, 4);
change(c, 1, 5);
change(c, 0, 1);
break;
case "F":
change(c, 2, 5);
change(c, 3, 4);
change(c, 2, 3);
break;
case "B":
change(c, 2, 4);
change(c, 3, 5);
change(c, 2, 3);
break;
case "A":
change(c, 0, 2);
change(c, 1, 3);
change(c, 0, 1);
break;
case "C":
change(c, 0, 3);
change(c, 1, 2);
change(c, 0, 1);
break;


default:
break;
}


}


public static void change(String[] c, int a, int b) {
String temp = c[a];
c[a] = c[b];
c[b] = temp;
}


public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String[] s1 = s.trim().split("");
int len = s.length();
for (int i = 0; i < s1.length; i++) {
String ss = s1[i];
reverse(ch, ss);
}
int t = 0;


for (int i = 0; i < ch.length; i++) {
t = t * 10 + Integer.valueOf(ch[i]);
}
System.out.println(t);
}
}


0 0
原创粉丝点击