1.单位变换
- 题目
在计算机存储中,15.125GB是多少MB?
- 知识点
1MB = 1024KB
1KB = 1024B
1B = 8bit ( B 为字节,bit 为位)
- 答案
15.125 * 1024 = 15488M
2. 约数个数
- 题目
1200000有多少个约数(只计算正约数)。
- 代码
public class LQB02 {
public static void main(String[] args) {
int x = 1200000;
int count = 0;
for (int i = 1; i <= x; i++) {
if(x % i == 0)
count++;
}
System.out.println(count);
}
}
- 答案:
96
3.叶结点数
- 题目
一棵包含有2019个结点的二叉树,最多包含多少个叶结点?
- 知识点
二叉树:树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;
对于任何一课二叉树,度为0的结点数(即叶节点) = 度为2的节点数 + 1;
- 当二叉树的总个数为奇数时,此二叉树"无度为1"的结点
- 当二叉树的总个数为偶数时,
此二叉树"只有一个度为1"的结点
- 答案:
设度为2的结点为n个, 由于2019是奇数,所以二叉树没有度为1的结点。
·n + ( n + 1 ) = 2019 ==> n = 1009
最多包含1010
个叶节点
4.数字9
- 题目
在1至2019中,有多少个数的数位中包含数字9?
注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算时只是算一个数
- 代码①
public class LQB04 {
public static void main(String[] args) {
int count = 0;
for (int i = 9; i <= 2019; i++) {
String s = Integer.toString(i);
if(s.contains("9"))
count++;
}
System.out.println(count);
}
}
- 代码②
public class LQB04 {
public static void main(String[] args) {
int count = 0;
for (int i = 9; i <= 2019; i++) {
if(judge(i))
count++;
}
System.out.println(count);
}
public static boolean judge(int i){
while (i > 0) {
if(i % 10 == 9){
return true;
}
i = i / 10;
}
return false;
}
}
- 答案:
544
5.数位递增的数
- 题目
题目描述:
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
输入格式:
输入的第一行包含一个整数 n。
输出格式:
输出一行包含一个整数,表示答案。
样本输入:
30
样本输出:
26
- 代码
public class LQB05 {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int count = 0;
for(int i = 1; i <= n; i++){
String s = Integer.toString(i);
boolean flag = true;
for (int j = 0; j < s.length()-1 ; j++ ){
if(s.charAt(j) > s.charAt(j+1)){
flag = false;
}
}
if(flag)
count++;
}
System.out.println(count);
}
}
6.递增三元组
- 题目
题目描述:
在数列 a[1], a[2], …, a[n] 中,如果对于下标 i, j, k 满足 0 < i < j < k < n+1 且 a[i] < a[j] < a[k],则称 a[i], a[j], a[k] 为一组递增三元组,a[j]为递增三元组的中心。
给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
输入格式:
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a[1], a[2], …, a[n],相邻的整数间用空格分隔,表示给定的数列。
输出格式:
输出一行包含一个整数,表示答案。
样本输入:
5
1 2 5 3 5
样本输出:
2
- 思路
枚举每一个数,看左边有没有比它小的 && 右边有没有比它大的,如果符合条件,count++。
- 代码
public class LQB06 {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int[] arr = new int[n];
int count = 0;
for (int i = 0; i < n; i++)
arr[i] = cin.nextInt();
for (int i = 1; i < n; i++) {
int big = 0;
int small = 0;
for(int j = 0; j < i; j++) {
if(arr[i] > arr[j]){
small = 1;
break;
}
}
for(int j = i+1; j < n; j++) {
if(arr[i] < arr[j]){
big = 1;
break;
}
}
if(big == 1 && small == 1)
count++;
}
System.out.println(count);
}
}
7.音节判断
- 题目
题目描述:
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
输入格式:
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式:
输出答案,或者为yes,或者为no。
样本输入:
lanqiao
world
样本输出:
yes
no
- 正则表达式
字符的取值范围
1.[abc] : 表示可能是a,可能是b,也可能是c。
2.[^abc]: 表示不是a,b,c中的任意一个
3.[a-zA-Z]: 表示是英文字母
4.[0-9]:表示是数字
简洁的字符表示
.:匹配任意的字符
\d:表示数字
\D:表示非数字
\s:表示由空字符组成,[ \t\n\r\x\f]
\S:表示由非空字符组成,[^\s]
\w:表示字母、数字、下划线,[a-zA-Z0-9_]
\W:表示不是由字母、数字、下划线组成
数量表达式
1.?: 表示出现0次或1次
2.+: 表示出现1次或多次
3.*: 表示出现0次、1次或多次
4.{n}:表示出现n次
5.{n,m}:表示出现n~m次
6.{n,}:表示出现n次或n次以上
- 代码①
import java.util.Scanner;
import java.util.regex.*;
public class LQB07 {
public static void main(String[] args) {
String pattern = "[^aeiou]+[aeiou]+[^aeiou]+[aeiou]+";
Pattern p = Pattern.compile(pattern);
Scanner cin = new Scanner(System.in);
String s = cin.next();
Matcher m = p.matcher(s);
boolean flag = m.matches();
if(flag)
System.out.println("yes");
else
System.out.println("no");
}
}
- 代码②
public class LQB07 {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String s = cin.next();
if(result(s))
System.out.println("yes");
else
System.out.println("no");
}
//判断yes or no
static boolean result(String s ){
if(s.length() < 4)
return false;
if(isYuan(s.charAt(0)) || !isYuan(s.charAt(s.length()-1)))
return false;
int count = 0;
int[] yuan = new int[s.length()];
for (int i=0;i<s.length();i++) {
if(isYuan(s.charAt(i)))
yuan[i] = 1;
else
yuan[i] = 0;
}
for(int i=1;i<s.length();i++){
if(yuan[i-1]+yuan[i]==1)
count++;
}
return count==3;
}
//判断是否为元音字母
public static boolean isYuan(char c) {
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
return true;
else
return false;
}
}
8.种地
- 题目
题目描述:
小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k 个月后空地上哪些地方有草。
输入格式:
输入的第一行包含两个整数 n, m。
接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。
接下来包含一个整数 k。
输出格式:
输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。
样本输入:
4 5
.g…
…
…g…
…
2
样本输出:
gggg.
gggg.
ggggg
.ggg.
- 代码
import java.util.Scanner;
public class LQB08 {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int m = cin.nextInt();
char[][] c = new char[n][m];
char[][] cc = new char[n][m];
for(int i=0;i<n;i++){
String s = cin.next();
c[i] = s.toCharArray();
cc[i] = s.toCharArray();
}
int k = cin.nextInt();
while(k!=0){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(c[i][j] == 'g'){
if(i>0)
cc[i-1][j]='g';//上
if(i<n-1)
cc[i+1][j]='g';//下
if(j>0)
cc[i][j-1]='g';//左
if(j<m-1)
cc[i][j+1]='g';//右
}
}
}
k--;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
c[i][j]=cc[i][j];
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
System.out.print(c[i][j]);
}
System.out.println();
}
}
}