2020第二场Java大学B组部分真题以及个人解析
2021省赛前热身,做几道,分享自己的想法同时学习大家的思路!
A:门牌制作
方法:作为第一题,直接暴力:遍历
public class A2020 {
public static void main(String[] args){
int count = 0;
for(int j= 1; j <=2020; j++){
int i = j;
while(i != 0 ){
int thismod = i % 10;
if(thismod == 2){
count++;
}
i = i/10;
}
}
System.out.print(count);
}
}
正确答案:624
C:蛇形填数
方法:这个题可以直接计算,写一下整体的思维吧
从图形上看这个题是类似于杨辉三角,当把题目从左上看到右下的时候,观察自然序列n和题设序列x之间的关系可以发现x = (n+1)/2
因此要求的20行20列数字就是第39行的第20个数字,等差公式计算得第38行最后一个数字应该是741
故得 741+20=761
正确答案:761
F:成绩分析
方法:常规操作比大小,求均值
注意格化输出平均值 ! ! !
方案代码:
public class F2020 {
public static void main(String[] args){
int g_max = 0,g_min = 0;
float g_avg = 0;
int n = 0;
int[] grade = new int[110];
Scanner sc = new Scanner(System.in);
if(sc.hasNext()){
n = sc.nextInt();
}
for(int i=0; i< n; i++){
if(sc.hasNext()){
grade[i] = sc.nextInt();
g_avg += grade[i];
}
}
g_avg = g_avg/n;
for(int i=0; i< n; i++){
for(int j= i+1; j <n;j++){
int ma = max_Array(grade[i],grade[j]);
int mi = min_Array(grade[i],grade[j]);
if(g_max <ma){
g_max = ma;
}
if(g_min == 0){
g_min = mi;
}
else if(g_min >mi ){
g_min = mi;
}
}
}
System.out.println(g_max);
System.out.println(g_min);
System.out.printf("%.2f",g_avg);
}
public static int max_Array(int a,int b){
return a>b?a:b;
}
public static int min_Array(int a,int b){
return a<b?a:b;
}
}
G:单词分析
方法:
- 预定义字母数组
- TreeMap键值对存储字符数据
- 数值统计
- 寻找出现次数最多的键值
方案代码:
public class G2020 {
public static void main(String[] args) {
Map<Character,Integer> map = new TreeMap<Character,Integer>();
// 初始化集合
for(int i = 97; i< 123; i++){
map.put((char)i, 0);
}
String word = null;
Scanner sc = new Scanner(System.in);
if(sc.hasNext()){
word = sc.next();
}
int l = word.length();
for(int i = 0; i< l;i++){
char c = word.charAt(i);
if(map.containsKey(c)){
int temp = map.get(c);
//这里获取到的temp是 0,需要++在前
map.put(c, ++temp);
}
}
//寻找最大值,输出对应的字母,这里并没有对Map进行排序
int max = 0;
char max_c = 0;
for(int i = 97; i< 123; i++){
int temp = map.get((char)i);
if( temp > max){
max = temp;
max_c = (char)i;
}
}
System.out.println(max);
System.out.println(max_c);
}
}