题型结构
- 十道题:三道填空题,七道程序设计题。
填空出题点
- 循环(for,while)
- 字符串
- String s=任意类型+"";
- toCharArray()
- charAt()
- split()
- str.endsWith(str2),判断字符串str的最后一位是否和指定str2相同
- substring()
- 集合
- List:有序,不重复
- set:无序,重复
- map:key-value
循环+字符串
例题1:2019年Java C组第一题
小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 2019 中,所有这样的数的和是多少?
思路:for循环+字符串
public static void main(String[] args) {
// 记录求得的和
int sum=0;
for(int i=1;i<2020;i++){
String s=i+"";
char []c=s.toCharArray();
// 得到每一个数字中的每一个元素
for(int j=0;j<c.length;j++){
if(c[j]=='2' || c[j]=='0' || c[j]=='1' || c[j]=='9'){
sum+=i;
break;
}
}
}
System.out.println(sum);
}
例题2:2015年Java C组第二题
有些数字的立方的末尾正好是该数字本身。
比如:1,4,5,6,9,24,25,…
请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。
思路:for循环+字符串
public static void main(String[] args) {
// 记录符合要求的个数
int count=0;
// 遍历10000内的每个元素
for(long i=1;i<=10000;i++){
String str2=i*i*i+"";
String str=i+"";
boolean result=str2.endsWith(str);
if(result==true){
count++;
}
}
System.out.println(count);
}
while循环
例题3:2019年Java C 组第二题
小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。
当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方 形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。 例如,对于一块两边分别为 5 和 3 的材料(记为 5×3),小明会依次切出 3×3、2×2、1×1、1×1 共 4 个正方形。 现在小明有一块矩形的材料,两边长分别是 2019 和 324。请问小明最终会 切出多少个正方形?
思路:while循环
public static void main(String[] args) {
// 记录边长
int length=2019,width=324;
// 记录次数
int count=0;
while(true){
if(length>width){
count++;
length-=width;
}else if(width>length){
count++;
width-=length;
}else{
count++;
break;
}
}
System.out.println(count);
}
例题4:2018年Java C 组第一题
小明被不明势力劫持。后被扔到x星站再无问津。小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文。他决定在x星战打工。好心的老板答应包食宿,第1天给他1元钱。并且,以后的每一天都比前一天多2元钱,直到他有足够的钱买票。
请计算一下,小明在第几天就能凑够108元,返回地球。
思路:while循环
public static void main(String[] args) {
int day=0;
int money=1;
int sum=0;
while(sum<108){
day++;
sum+=money; //1+3+5+7
money+=2; //3
}
System.out.println(day);
}
}
例题5:2018年Java C 组第二题
5只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。
第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉。
第2只猴子醒来,重新把香蕉均分成5堆,还剩下2个,就吃掉并把自己的一份藏起来继续睡觉。
第3只猴子醒来,重新把香蕉均分成5堆,还剩下3个,就吃掉并把自己的一份藏起来继续睡觉。
第4只猴子醒来,重新把香蕉均分成5堆,还剩下4个,就吃掉并把自己的一份藏起来继续睡觉。
第5只猴子醒来,重新把香蕉均分成5堆,哈哈,正好不剩!
请计算一开始最少有多少个香蕉。
思路:while循环
public static void main(String[] args) {
// 分析:设最开始有n个香蕉,
// n%5=1,剩余a=(n-1)/5*4;
// a%5=2,剩余b=(a-2)/5*4;
// b%5=3,剩余c=(b-3)/5*4;
// c%5=4,剩余d=(c-4)/5*4;
// d%5=0
int n=1;
while(true){
if(n%5==1){
int a=(n-1)/5*4;
if(a%5==2){
int b=(a-2)/5*4;
if(b%5==3){
int c=(b-3)/5*4;
if(c%5==4){
int d=(c-4)/5*4;
if(d%5==0 && d>0){
break;
}}}}}
n++;
}
System.out.println(n);
}
双层for循环+set集合+字符串
例题6:2019年Java C 组第三题
一个字符串的非空子串是指字符串中长度至少为 1的连续的一段字符组成 的串。例如,字符串aaab有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个
数。
请问,字符串0100110001010001 有多少个不同的非空子串?
思路:双层for循环+set集合+字符串
public static void main(String[] args) {
// 思路:双层循环+set集合去重
String s="0100110001010001";
HashSet<String> hs=new HashSet<>();
// 外层循环:i表示开始截取的初始位置
for(int i=0;i < s.length();i++){
// 内层循环:j表示截取个数
for(int j = i+1;j<=s.length();j++){
// 存入hashset集合,自动去重效果
hs.add(s.substring(i,j));
}
}
System.out.println(hs.size());
}
while循环+list集合
例题7:2019年Java C 组第四题
我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……
请你计算 第 2019 个质数是多少?
思路:while循环+list集合
public static void main(String[] args) {
//思路:求出每一个质数,存入List集合
//方法:存储自动有序→while循环+list集合
//创建有序的集合ArrayList
ArrayList<Integer> list=new ArrayList<>();
//先存入素数2
list.add(2);
//即素数查找从3开始
int i=3,j;
while (list.size()<2020) {
for(j=2;j<i;j++){
//如果可以被除1和本身之外的其他数字整除,直接跳出for循环,进行下一个素数的判定
if(i%j==0){
break;
}
}
//符合要求,存入集合,集合长度自动+1
if(j>=i){
list.add(i);
}i++;
// 取出集合中第2018个元素
}
System.out.println(list.get(2018));
}