您的位置:首页 > 其它

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

2017-03-24 21:44 411 查看
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);
}

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