第一部分(简单题):
HJ1 字符串最后一个单词的长度
解法一
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s = in.nextLine();
int current = 0;
char br = ' ';
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == br){
current = 0;
}else{
current++;
}
}
System.out.println(current);
}
}
解法二
while(sc.hasNextLine()):读取用空格分隔开的数字字符串,然后将其存入数组(刷题时常用)
Sline = line.substring(line.lastIndexOf(" ")+1):从空格后第一个字符开始截取
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String line = sc.nextLine();
line = line.substring(line.lastIndexOf(" ")+1);
System.out.println(line.length());
}
}
}
HJ2 计算某字符出现次数
解法一:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String ch = sc.nextLine();
Pattern compile = Pattern.compile(ch,Pattern.CASE_INSENSITIVE);
Matcher matcher = compile.matcher(str);
int count = 0;
while(matcher.find()){
count++;
}
System.out.println(count);
}
}
解法二:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
//将输入的字符串转成char型便于比较
char ch1 = sc.nextLine().charAt(0);
int count = 0;
char[] arrs = str.toCharArray();
for(char ch:arrs){
//char类型没有忽略大小写比较,但是可以直接转成大写或者小写比较
if(Character.toUpperCase(ch) == Character.toUpperCase(ch1)){
count++;
}
}
System.out.println(count);
}
}
HJ4 字符串分隔
解法一:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String str = sc.nextLine();
if(str.length() % 8 != 0){//长度不够8的整数倍补7个0
str = str+"0000000";
}
while(str.length() >= 8){
//现在字符串长度肯定大于等于8,将其8个截取,最后扔的肯定是补得0
System.out.println(str.substring(0,8));
str = str.substring(8);
}
}
}
}
HJ5 进制转换
解法一:公式
import java.util.Scanner;
import java.lang.Math;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String str = sc.nextLine();
int count = 0;//记录转换后的数字
for(int i = 0; i < str.length() - 2; i++){
//由于前面两位都是'0x',故从第三位开始
char ch = str.charAt(i+2);
int t = 0;//记录字母转换成的数值
//将字母转换为数值
if(ch>='0' && ch<='9')
t = ch - '0';
//字母'A'/'a' - 'F'/'f'对应数字10~15
else if(ch>='A' && ch<='F')
t = ch - 'A' + 10;
else if(ch>='a' && ch<='f')
t = ch - 'a' + 10;
//计算加和
count += t * Math.pow(16,str.length()-i-3);
}
System.out.println(count);
}
}
}
解法二:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String str = sc.nextLine().substring(2);
System.out.println(Integer.parseInt(str,16));
}
}
}
HJ6 质数因子
解法一:
import java.util.Scanner;
import java.lang.Math;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
long num = sc.nextLong();
long k = (long)Math.sqrt(num);
for(long i = 2; i<=k; i++){
while(num%i == 0){
System.out.print(i + " ");
num /= i;
}
}
System.out.println(num == 1 ? "":num+" ");
}
}
HJ7 取近似值
解法一:
对获取数字加0.5后强转为整数型,如果元数据小数部分>=0.5,则+0.5强转后,整数部分进一
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double number = sc.nextDouble();
System.out.println((int)(number + 0.5));
}
}
解法二:
import java.util.Scanner;
import java.lang.Math;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
System.out.println((int)Math.round(sc.nextDouble()));
}
}
}
HJ8 合并表记录
解法一:
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int next = sc.nextInt();
TreeMap<Integer,Integer> map = new TreeMap<>();
for(int i = 0; i < next; i++){
int key = sc.nextInt();
int value = sc.nextInt();
if(map.containsKey(key)){
map.put(key,map.get(key)+value);
}else{
map.put(key,value);
}
}
for(Map.Entry<Integer,Integer> integerIntegerEntry : map.entrySet()){
System.out.println(integerIntegerEntry.getKey()+" "+integerIntegerEntry.getValue());
}
}
HJ9 提取不重复的整数
解法一:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
char[] chars = str.toCharArray();
//set中的LinkedHashSet就是有序的
LinkedHashSet<Character> set = new LinkedHashSet<>();
for(int i = chars.length - 1; i >= 0; i--){
set.add(chars[i]);
}
str = "";
Iterator<Character> it = set.iterator();
while(it.hasNext()){
str += it.next();
}
System.out.println(str);
}
}
解法二:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//逆序排序
StringBuilder stringBuilder = new StringBuilder(sc.nextLine()).reverse();
String str = stringBuilder.toString();
//结果集
StringBuilder result = new StringBuilder();
for(int i = 0; i < str.length(); i++){
if(str.indexOf(str.charAt(i)) == i){
result.append(str.charAt(i));
}
}
System.out.println(result.toString());
}
}
HJ10 字符个数统计
❤解法一:
import java.util.*;
import java.util.stream.Collectors;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
HashSet<Character> set = new HashSet<>();
String line = sc.nextLine();
char[] chars = line.toCharArray();
for(char achar:chars){
set.add(achar);
}
set.stream().filter(c->Integer.valueOf(c) >= 0
&&
Integer.valueOf(c) <= 127).collect(Collectors.toSet()
);
System.out.println(set.size());
}
}
解法二:
import java.util.HashSet;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
HashSet<Character> hs = new HashSet<Character>();
for(int i = 0; i < str.length(); i++){
hs.add(str.charAt(i));
}
System.out.println(hs.size());
}
}
HJ11 数字颠倒
解法一:
import java.util.*;
import java.lang.String;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int number = sc.nextInt();
System.out.println(new StringBuffer(String.valueOf(number)).reverse());
}
}
}
解法二:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
StringBuilder sb = new StringBuilder(s);
System.out.print(sb.reverse().toString());
}
}
解法三:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(bf.readLine());
ArrayList<Character> temp = new ArrayList<>();
String s = num + "";//转换为字符串
//存入ArrayList,逆序存入
for(int i = s.length() - 1; i >= 0; i--){
temp.add(s.charAt(i));
}
s = "";
for(Character character : temp){
s += character;
}
System.out.println(s);
}
}
HJ12 字符串反转
解法一:栈的特性
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Stack<Character> stack = new Stack<>();
String s = sc.next();
char[] chars = s.toCharArray();
for(int i = 0; i < s.length(); i++){
stack.push(chars[i]);
}
while(!stack.isEmpty()){
System.out.print(stack.pop());
}
}
}