导语
每篇将有两道经典Java机试题,每道题后面均为大家附上代码,每一道题目力求:
- 能够在JDK11环境下编译
- 在Eclipse JavaIDE中运行通过
- 思路易想易懂易学
- 重点代码有注释
第001题 逆置求和(难度:★☆☆☆☆)
题目描述:
编写一个reverseadd函数,实现两个数逆置后再求和的功能,比如输入123,456就是求321+654,输出975。注意:输入100,200输出3,(自动去除开头的0)。
输入示例:
123
456
输出示例:
975
思路
数倒置:
1.循环模取10,保存单个数到ArrayList链表数组中;
while (add != 0) { array_add1.add(add1 % 10); add1 = add1 / 10; }
2.循环取数每次乘10加,合并数字。
for (int i = 0; i < array_add.size(); i++) { reverseadd = reverseadd * 10 + array_add.get(i); }
代码
import java.util.ArrayList;
import java.util.Scanner;
class E {
public int reverseadd(int add1,int add2) {
ArrayList<Integer> array_add1 = new ArrayList<Integer>();//保存加数1的链表
ArrayList<Integer> array_add2 = new ArrayList<Integer>();//保存加数2的链表
while (add1 != 0 && add2 != 0) { //分别分离每位上的数字
if(add1 != 0) { //分离加数1
array_add1.add(add1 % 10);
add1 = add1 / 10;
}
if(add2 != 0) { //分离加数2
array_add2.add(add2 % 10);
add2 = add2 / 10;
}
}
int reverseadd1 = 0, reverseadd2 = 0; //把链表里的数字重新组合成一个数
for (int i = 0; i < array_add1.size(); i++) {
reverseadd1 = reverseadd1 * 10 + array_add1.get(i);
}
for (int i = 0; i < array_add2.size(); i++) {
reverseadd2 = reverseadd2 * 10 + array_add2.get(i);
}
return reverseadd1 + reverseadd2; //返回逆置后的两个加数和
}
}
public class Test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int add1 = sc.nextInt();
int add2 = sc.nextInt();
E e = new E(); //实例化
int sum = e.reverseadd(add1, add2); //调用reverseadd函数
System.out.println(sum); //输出结果
}
}
运行结果
第002题 字符串初始化(难度:★☆☆☆☆)
题目描述:
输入一个字符串,此字符串中包含有大小写字母,逗号(“,”),空格(“ ”),现需要对其进行初始化。
初始化规则:每个逗号或空格后紧跟的第一个字母如果已经是大写,则保持不变,否则变为大写;其余字母如果有大写的,需要变为小写字母,而小写字母不变;逗号或空格原样输出。(要求输出后仍然是一个字符串)
输入示例:
abc,DeF ghi JKL,oPq
输出示例:
Abc,Def Ghi Jkl,Opq
思路
考虑到要遍历字符串,想到将字符串先变为字符数组(String.toCharArray()),进行如下判断后,再转换成字符串(String.valueOf(array))。
- 当前是“,”或“ ”,继续判断下一个字母是否为小写,如果是,则-32变为大写;(大小写字母的ASCII相差32)
- 当前不是“,”或“ ”,判断是否为大写字母,如果是,则+32变为小写;
代码
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String string = sc.nextLine(); //读取一行字符串
char array[] = string.toCharArray(); //将字符串变为字符数组
for (int i = 0; i < array.length; i++) {
if(array[i] == ','|| array[i] == ' ') { //当前是“,”或“ ”
if(array[i + 1] >= 97 && array[i + 1] <= 122) { //继续判断下一个是否为小写字母(小写字母ASCII范围是97~122)
array[i + 1] = (char) (array[i + 1] - 32); //变大写
}
i++; //下一个字符已经判断过了,所以无需再次判断
}
else {
if(array[i] >= 65 && array[i] <= 90) { //当前是否为大写字母(大写字母ASCII范围是65~90)
array[i] = (char) (array[i] + 32); //变小写
}
}
}
System.out.println(String.valueOf(array)); //将字符数组变为字符串输出
}
}
运行结果
以上是本次两道Java机试题
如有不足,欢迎批评指正
欢迎阅读下一篇:Java 100道典型机试笔试题(02)
作者:小南瓜
日期:2019年4月13日15:40