目录
第一题:不同子串
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
一个字符串的非空子串是指字符串中长度至少为 11 的连续的一段字符组成的串。例如,字符串 aaab 有非空子串 a, b, aa, ab, aaa, aab, aaab,一共 77 个。注意在计算时,只算本质不同的串的个数。
请问,字符串 01001100010100010100110001010001 有多少个不同的非空子串?
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
题目分析
先分割字符串再添加的hashset集合中(集合中的元素不重复)
题目代码
import java.util.HashSet; public class 不同子串 { public static void main(String[] args) { HashSet<String> strings = new HashSet<>(); String s="0100110001010001"; for (int i = 0; i < s.length(); i++) { for (int j = i+1; j <= s.length(); j++) { String temp = s.substring(i,j); strings.add(temp); } } System.out.println(strings.size()); } }
第二题:单词分析
题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
输出描述
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
输入输出样例
示例 1
输入
lanqiao
输出
a 2
示例 2
输入
longlonglongistoolong
输出
o 6
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
题目分析
注意这题要先将数组复制再在原数组上排序
题目代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class 单词分析 { public static void main(String[] args) throws IOException { BufferedReader ins = new BufferedReader(new InputStreamReader(System.in)); char[] chars = ins.readLine().toCharArray(); int[] arr = new int[26]; for (int i = 0; i < chars.length; i++) { arr[chars[i]-'a']++; } int[] arr2 = Arrays.copyOf(arr, 26); Arrays.sort(arr); int max = arr[25]; for (int i = 0; i < arr.length; i++) { if (arr2[i]==max){ System.out.println((char)(i+'a')); System.out.println(max); break; } } } }
第三题:纸张尺寸
问题描述
在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm ×× 841mm, 将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm ×× 594mm, 在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。
输入纸张的名称, 请输出纸张的大小。
输入格式
输入一行包含一个字符串表示纸张的名称, 该名称一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。
输出格式
输出两行,每行包含一个整数,依次表示长边和短边的长度。
样例输入1
A0
样例输出1
1189 841
样例输入 2
A1
样例输出 2
841 594
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
题目代码
import java.util.Scanner; public class 纸张尺寸 { public static void main(String[] args) { int cd = 1189; int kd = 841; Scanner sca = new Scanner(System.in); String[] split = sca.next().split(""); int a = Integer.parseInt(split[1]); for (int i = 0; i < a; i++) { int max = Math.max(cd, kd); if (max == cd) { cd = cd / 2; } else kd = kd / 2; } System.out.println(Math.max(cd,kd)); System.out.println(Math.min(cd,kd)); } }