Java 100道经典机试笔试题(01)——附可运行代码

导语

每篇将有两道经典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 array_add1 = new ArrayList();//保存加数1的链表
		ArrayList array_add2 = new ArrayList();//保存加数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);                              //输出结果
		
	}
}

运行结果

Java 100道经典机试笔试题(01)——附可运行代码_第1张图片

Java 100道经典机试笔试题(01)——附可运行代码_第2张图片


第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 100道经典机试笔试题(01)——附可运行代码_第3张图片


以上是本次两道Java机试题

如有不足,欢迎批评指正

欢迎阅读下一篇:Java 100道典型机试笔试题(02)


作者:小南瓜

日期:2019年4月13日15:40

你可能感兴趣的:(Java编程题)