1.
解题思路:首先获取系统输入,使用Scanner类。当有输入时,获取输入字符串,将字符串按照空格拆分并保存至数组中。然后计算数组最后一个元素的length.
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String s = scanner.nextLine();
System.out.println(lengthOfLast(s));
}
}
private static int lengthOfLast(String str) {
String[] strings = str.split(" ");
return strings[strings.length - 1].length();
}
}
2.
题目描述:写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
输入描述:输入一个有字母和数字以及空格组成的字符串,和一个字符。
解题思路:首先使用Scanner类nextline()方法获取输入字符串并使用toUpperCase()方法将字符串全部转为大写(题目中要求不区分大小写)。然后用Scanner类next()方法获取最后输入的字符。
next():
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串。
nextLine():
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
所以此题中应使用next获取最后输入的字符。
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string =scanner.nextLine().toUpperCase();
char target = scanner.next().toUpperCase().toCharArray()[0];
int count = 0;
for (int i=0; i<string.length(); i++) {
if (string.charAt(i) == target) count ++;
}
System.out.println(count);
}
}
3.
题目描述:写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
解题思路:字符串前两位为十六进制0x,然后用parseInt()方法。parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。如果方法有两个参数, 使用第二个参数指定的基数,将字符串参数解析为有符号的整数。 (基数可以是 10, 2, 8, 或 16 等进制数)。
6.
题目描述:功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )最后一个数后面也要有空格
详细描述:
函数接口说明:
public String getResult(long ulDataInput)
输入参数:
long ulDataInput:输入的正整数
返回值:
String
输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
解题思路:链接:https://www.nowcoder.com/questionTerminal/196534628ca6490ebce2e336b47b3607来源:牛客网
好多人没明白这个问题的意思,其实就是让你把输入的整数因式分解,只不过因子必须都是质数
例如:180 = 2 * 2 * 3 * 3 * 5;90 = 2 * 3 * 3 * 5;而不是找出所有的质数因子
import java.util.Scanner;
public class Main6 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLong()) {
long number = scanner.nextLong();
System.out.println(getResult(number));
}
}
private static String getResult(long ulDataInput) {
StringBuffer strbf = new StringBuffer();
long num = ulDataInput;
while (num != 1 ) {
for (int i=2; i<= num; i++) {
if (num % i == 0) {
strbf.append(i + " ");
num /= i;
break;
}
}
}
return strbf.toString();
}
}
7.
题目描述:写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
输入描述: 输入一个正浮点数值
输出描述: 输出该数值的近似整数值
解题思路:来源牛客网;得到输入的Double值后将其强制转换为整数。Double值减去整数如果大于等于0.5,则其小数点后数值大于等于5;小于0.5,则直接输出整数。
package com.example;
import java.util.Scanner;
/**
* Created by Zhans on 2018/8/22.
*/
public class Main7 {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextDouble()) {
Double aDouble = scanner.nextDouble();
System.out.println(getReturn(aDouble));
}
}
public static int getReturn(double num) {
int i = (int) num;
return (num - i) >= 0.5 ? i + 1 : i;
}
}
8.
题目描述:数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:先输入键值对的个数,然后输入成对的index和value值,以空格隔开
输出描述:
解题思路:首先思考使用什么数据结构存放给定的键值对。这里使用TreeMap.(不要问我为什么能想到TreeMap,因为我也没想到,是看到大神的思路,~(@^_^@)~)。先得到输入的键值对个数的整数值,使用Scanner.nextInt()方法。然后判断是否还有输入,如果有则新建TreeMap对象新输入的键值,然后使用TreeMap.containsKey(key)判断是否存在此键,如果存在,将值合并,并存入。题目要求按升序输出,使用TreeMap的put(K key, V value)方法在每添加一个元素时,都会自动排序,这样便省去了排序的过程【这是使用TreeMap 的原因吗?】,然后使用for循环输出。
<