题库来源
计算字符个数
写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
char[] text = sc.nextLine().toLowerCase().toCharArray();
char targetChar = sc.nextLine().toLowerCase().toCharArray()[0];
int count=0;
for (Character t : text) {
if (t==targetChar) {
count=count+1;
}
}
System.out.println(count);
}
}
明明的随机数
他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。
再把这些数从小到大排序,按照排好的顺序去找同学做调查。
TreeSet与HashSet
HashSet不能保证元素的排列列顺序,TreeSet是SortedSet接⼝口的唯一实现类,可以确保集合
元素处于排序状态
HashSet底层⽤用的是哈希表,TreeSet采⽤用的数据结构是红黑树(红黑树是一种特定类型的二叉树)
HashSet中元素可以是null,但只能有一个,TreeSet不不允许放入null
一般使用HashSet,如果需要排序的功能时,才使⽤用TreeSet(性能原因)
import java.util.*;
public class Main
{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
TreeSet<Integer> set=new TreeSet<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
int n=sc.nextInt();
if(n>0){
for(int i=0;i<n;i++){
set.add(sc.nextInt());
}
}
for(Integer i:set){
System.out.println(i);
}
}
}
}
字符串数组
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
这题的重点在于要将长度不是8的整数倍字符串补齐后循环输出,而不是输出同时补齐(太麻烦并且)。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String line = sc.nextLine();
int lineLen = line.length();
if (lineLen % 8 == 0) {
for (int i = 0; i < lineLen; i = i + 8) {
System.out.println(line.substring(i, i + 8));
}
} else {
int lenMod = 8 - lineLen % 8;
for (int i = 0; i < lenMod; i++) {
line = line + 0;
}
if (lineLen < 8) {
System.out.println(line);
} else {
for (int j = 0; j < lineLen; j = j + 8) {
System.out.println(line.substring(j, j + 8));
}
}
}
}
}
}
进制转换
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(Long.parseLong(line.substring(2), 16));
}
}
}
输出质因子
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
最后一个数后面也要有空格
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
long number = 0;
while(scanner.hasNextLong())
{
number = scanner.nextLong();
isPrimerFactors(number);
}
}
private static void isPrimerFactors(long num)
{
long number = num;
while(number != 1)
{
for(int i = 2; i <= number ;i++)
{
if(number % i == 0)
{
number /= i;
System.out.print(i + " ");
break;
}
}
}
}
}
取近似值
java中的三种取整函数:floor,ceil,round
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
import java.util.*;
public class Main
{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
float num=sc.nextFloat();
System.out.println(Math.round(num));
}
}
合并表记录(TreeMap)
数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,
即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num=sc.nextInt();
TreeMap<Integer,Integer> map=new TreeMap<>();
while(num>0){
int key=sc.nextInt();
int value=sc.nextInt();
if(!map.containsKey(key)){
map.put(key,value);
}else{
map.put(key,map.get(key)+value);
}
num--;
}
Iterator iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Integer,Integer> en = (Map.Entry<Integer,Integer>)iterator.next();
Integer key=en.getKey();
Integer value=en.getValue();
System.out.println(key+" "+value);
}
}
}
提取不重复的整数
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
① HashSet的输出顺序是不确定的,但是它的速度最快;
② TreeSet输出顺序是升序排列的,相当于C++中的set,个人比较喜欢这种;
③ LinkedHashSet输出顺序是确定的,就是插入时的顺序。
import java.util.*;
/**
* @Author hwj
* @Date 2020/8/15 8:37
* @Desc:
**/
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] number=sc.nextLine().split("");
int numLen=number.length;
LinkedHashSet<Integer> set=new LinkedHashSet<>();
for(int i=numLen-1;i>=0;i--){
if(!set.contains(Integer.parseInt(number[i]))) {
set.add(Integer.parseInt(number[i]));
}
}
Iterator<Integer> iterator= set.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next());
}
}
}
句子逆序
将一个英文语句以单词为单位逆序排放。
例如“I am a boy”,逆序排放后为“boy a am I”
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String sentence = sc.nextLine();
String strReverse=reverse(sentence);
System.out.println(strReverse);
}
public static String reverse(String sentence){
String[] str=sentence.split(" ");
int strLen=str.length;
String str2=str[strLen-1];
for(int i=strLen-2;i>=0;i--){
str2=str2+" "+str[i];
}
return str2;
}
字串的连接最长路径查找
给定n个字符串,请对n个字符串按照字典序排列。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int num=n;
TreeSet<String> set=new TreeSet<>();
while(num>=0){
set.add(sc.nextLine());
num--;
}
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
字串的连接最长路径查找
在线编程适用: BufferedReader
集合排序 Collections.sort()
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/**
* @Author hwj
* @Date 2020/8/15 8:37
* @Desc:
**/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int num=Integer.parseInt(br.readLine());
ArrayList<String> arr=new ArrayList<>();
while(num>0){
num--;
arr.add(br.readLine());
}
Collections.sort(arr);
for(String s:arr){
System.out.println(s);
}
}
}