【算法】华为笔试_颠倒相加_掷骰子
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);
}
}
这道题输入输出挺坑人,而且要求要调用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);
}
}
相关文章推荐
- 笔试算法题(22):二分法求旋转数组最小值 & 骰子值概率
- 华为2014年四道笔试算法题
- [算法]华为笔试题——字母和十进制数映射
- 华为历年笔试面试机考试题1——数字颠倒,字符串反转
- [置顶] 华为2014笔试算法题汇总
- [算法]华为笔试题——拼音与英文转换
- 算法题之三道2016华为校招上机笔试题
- 2014--华为笔试算法汇总
- 算法与数据结构——华为笔试题
- 华为2014笔试算法题汇总
- 偶见一道华为笔试题(简单的题更显算法啊--不可忽视的数学)
- 笔试算法题(21):将stack内外颠倒 & 判断扑克牌顺子
- 笔试面试算法经典--打印数组中相加和为给定值的二元组及三元组(Java)
- 华为算法题:超长的整形数据相加
- C/C++语言最新华为机试题“大数相加算法”
- 无限大数值相加的算法
- 华为——工作累,笔试面试也累
- 最小费用流算法不完全指南-2017华为软件精英挑战赛
- 最新九月百度人搜,阿里巴巴,腾讯华为京东360笔试面试二十题