资讯详情

2020第十一届蓝桥杯10月份省赛真题(JavaB组题解)

2020年第十一届蓝桥杯10月省赛真题(JavaB组题解)

  • 试题 A:门牌制作
  • 试题 B:寻找 2020
  • 试题 C:蛇形填数
  • 试题 D: 七段码
  • 试题 E:排序
  • 试题 F: 成绩分析
  • 试题 G: 单词分析
  • 试题 H: 数字三角形
  • 试题 I: 子串分值和
  • 试题 J: 装饰珠
真题下载

试题 A:门牌制作

本题总分:5 分

【问题描述】 小兰想为一条街的居民制作门牌号。 这条街一共有 2020 住户,门牌号从 1 到 2020 编号。 小蓝制作门牌的方法是先制作门牌 0 到 9 这些数字符最终根据需要将字符 贴在门牌上的符号,比如门牌 1017 要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。 制作一切 1 到 2020 号门牌需要多少个字符? 2?

思路

每个数据中累加2个数字

//第十一届蓝桥杯 试题 A:门牌制作 public class Main { 
             public static void main(String[] args) { 
             int num=0;     for(int i=0;i<2021;i ){ 
                 // 转换为字符串类型         String str=i "";         for(int j=0;j<str.length();j ){ 
                     // 用ASCII判断字符串中是否含有2             if(str.charAt(j)=='2'){ 
                         num ;             }         }     }         System.out.println(num);     } } 

答案:624

试题 B:寻找 2020

本题总分:5 分

【问题描述】 小蓝有一个只包含数字矩阵的数字矩阵 0 和 2.小蓝很喜欢 2020年,他想找出这个数字矩阵中有多少个 2020 。 小蓝只注重三种构成 2020 的方式: ?同一行连续四个字符从左到右构成 2020。 ?连续四个字符从上到下构成同一列 2020。 ?连续四个字符在从左上到右下的斜线上,从左上到右下构成 2020。例如,以下矩阵: 220000 000000 002202 000000 000022 002020

一共有 5 个 2020。其中 1 一个在同一行,1 一个在同一列,3 在斜线上。 小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一 在试题目录中有一个文件 2020.txt,里面是小蓝矩阵。 请帮助小兰确定他的矩阵中有多少个 2020。

2020.txt文档下载

//第十一届蓝桥杯 试题 B:寻找 2020 public class Main { 
        
    public static long count;
    public static void main(String[] args) { 
        
        //输入文档中的数据
        Scanner read = new Scanner(System.in);
        String[] str = new String[300]; //共三百行数据
        for(int i=0;i<300;i++){ 
        
            str[i] = read.nextLine();
        }
        read.close();
        f(str);
        System.out.println(count);
        read.close();
    }
    public static void f(String[] str){ 
        
        for(int i=0;i<str.length;i++){ 
        
            for(int j=0;j<str[i].length();j++){ 
        
                if(str[i].charAt(j)=='2'){ 
        //开头一定是2
                    //横向
                    if(str[i].length()-j>=4 && str[i].charAt(j+1)=='0' && str[i].charAt(j+2)=='2' && str[i].charAt(j+3)=='0')
                        count++;
                    //竖向
                    if(str.length-i>=4 && str[i+1].charAt(j)=='0' && str[i+2].charAt(j)=='2' && str[i+3].charAt(j)=='0')
                        count++;
                    //斜向
                    if(str[i].length()-j>=4 && str.length-i>=4 && str[i+1].charAt(j+1)=='0' && str[i+2].charAt(j+2)=='2' && str[i+3].charAt(j+3)=='0')
                        count++;
                }
            }
        }
    }
}

答案:16520

试题 C:蛇形填数

本题总分:10 分

【问题描述】 如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。

矩阵

容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列的数是多少?

思路:观察题目,易发现如下规律

//第十一届蓝桥杯 试题 C:蛇形填数
public class Main { 
        
    public static void main(String[] args) { 
        
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(result(n));
    }
    private static int result(int n) { 
        
        if (n == 1) { 
        
            return 1;
        }
        return result(n - 1) + 4 * (n - 1);
    }
}

答案:761

试题 D: 七段码

本题总分:10 分

【问题描述】 小蓝要用七段码数码管来表示一种特殊的文字。

上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符 的表达时,要求所有发光的二极管是连成一片的。 例如:b 发光,其他二极管不发光可以用来表达一种字符。 例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。 例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。 例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。 请问,小蓝可以用七段码数码管表达多少种不同的字符?

思路:相当于在{a, b, c, d, e, f, g}的所有子集里面,找到子集元素是相通的就行,先枚举所有子集,然后通过dfs看该子集元素是否相通。

//第十一届蓝桥杯 试题 D:七段码
public class Main{ 
        
	static int ans = 0;
	static int[] jl = new int[10];
	static int[][] map = new int[10][10];
	static int[] father = new int[10];
	public static void main(String[] args){ 
        
		//储存关系 a~g对应1~7
		map[1][2] = map[2][1] = 1;//a b
		map[1][6] = map[6][1] = 1;//a f
		map[2][7] = map[7][2] = 1;//b g
		map[2][3] = map[3][2] = 1;//b c
		map[3][4] = map[4][3] = 1;//c d 
		map[3][7] = map[7][3] = 1;//c g
		map[4][5] = map[5][4] = 1;//d e
		map[5][6] = map[6][5] = 1;//e f
		map[5][7] = map[7][5] = 1;//e g 
		map[6][7] = map[7][6] = 1;//f g
		//dfs遍历所有情况
		dfs(0);
		//
		System.out.print(ans);
	}
		public static void dfs(int n){ 
        
		//当7个灯都有状态时 进行判定
		if(n==7){ 
        
			//把亮着的灯统计下来
			ArrayList<Integer> a = new ArrayList<>();
			for(int i=1;i<=7;i++){ 
        
				if(jl[i]==1){ 
        
					a.add(new Integer(i));
				}
			}
			//判断
			if(a.size()!=0){ 
        
				if(judge(a)==1){ 
        
					ans++;
				}
			}
			a.clear();
			return;
		}
		//否则dfs灯情况
		jl[n+1] = 1;
		dfs(n+1);
		jl[n+1] = 0;
		dfs(n+1);
	}

	public static int judge(ArrayList<Integer> a){ 
        
		//System.out.println(++js);
		//并查集父集重置
		for(int i=0;i<10;i++){ 
        
			father[i] = i;
		}
		//并集
		for(int i=0;i<a.size();i++){ 
        
			for(int ii=0;ii<a.size();ii++){ 
        
				//如果两边相连的话 进行并集操作
				if(map[a.get(i).intValue()][a.get(ii).intValue()]==1)
				{ 
        
					int fx = find(a.get(i).intValue());
					int fy = find(a.get(ii).intValue());	
					if(fx!=fy){ 
        
						father[fx] = fy;
					}
				}	
			}
		}
		//查看是否都属于一个集合
		int temp = find(a.get(0).intValue());
		for(int i=1;i<a.size();i++){ 
        
			if(find(a.get(i).intValue())!=temp){ 
        
				return 0;
			}
		}
		return 1;
	}
	//查集
	public static int find(int x){ 
        
		return father[x]==x ? x : (father[x] = find(father[x]));
	}
}

答案:80

试题 E:排序

本题总分:15 分

【问题描述】 小蓝最近学习了一些排序算法,其中冒泡排序让他印象深刻。 在冒泡排序中,每次只能交换相邻的两个元素。 小蓝发现,如果对一个字符串中的字符排序,只允许交换相邻的两个字符, 则在所有可能的排序方案中,冒泡排序的总交换次数是最少的。 例如,对于字符串 lan 排序,只需要 1 次交换。对于字符串 qiao 排序, 总共需要 4 次交换。 小蓝找到了很多字符串试图排序,他恰巧碰到一个字符串,需要 100 次交换,可是他忘了吧这个字符串记下来,现在找不到了。 。如果可能找到多个,请告诉小蓝最短的那个。如果最短的仍然有多个,请告诉小蓝字典序最小的那个。请注意字符 串中可以包含相同的字符。

思路:冒泡排序,要求字符串最短,那就假设完全逆序,设长度为n,则移动次数为 n*(n-1)/2,要求移动次数恰好大于100,则 n=15;移动次数105。要求字典序最小,则把第六个字符移动到第一个位置,前五个字符后移一位。

//第十一届蓝桥杯 试题 E:排序
public class Main { 
        
        public static void main(String[] args) { 
        
            char[] s = "jonmlkihgfedcba".toCharArray();
            int count = 0;
            for (int j = 0; j < s.length - 1; j++) { 
        
                for (int i = 0; i < s.length - j - 1; i++) { 
        
                    if (s[i] > s[i + 1]) { 
        
                        char temp = s[i];
                        s[i] = s[i + 1];
                        s[i + 1] = temp;
                        count++;
                    }
                }
            }
            for (char c : s) { 
        
                System.out.print(c);
            }
            System.out.println();
            System.out.println(count);

        }
    }


答案:jonmlkihgfedcba

试题 F: 成绩分析

时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分

【问题描述】 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是 一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。

【输入格式】 输入的第一行包含一个整数 n,表示考试人数。 接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

【输出格式】 输出三行。 第一行包含一个整数,表示最高分。第二行包含一个整数,表示最低分。 第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。

【样例输入】 7 80 92 56 74 88 99 10

【样例输出】 99 10 71.29

【评测用例规模与约定】 对于 50% 的评测用例,1 ≤ n ≤ 100。对于所有评测用例,1 ≤ n ≤ 10000。

// 第十一届蓝桥杯 试题 F: 成绩分析
public class Main { 
        
    public static void main(String[] args) { 
        
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        int n = 0,t=0,max=Integer.MIN_VALUE,min=Integer.MAX_VALUE;
        double sum = 0;
        n = scanner.nextInt();
        for (int i = 0; i < n; i++) { 
        
            t = scanner.nextInt();
            sum+= t;
            if (t>max) { 
        
                max = t;
            }
            if (t<min) { 
        
                min = t;
            }
        }
        System.out.println(max);
        System.out.println(min);
        System.out.println(String.format("%.2f", sum/n));
    }
}

试题 G: 单词分析

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

【问题描述】 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不 住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得 最多来分辨单词。 现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

【输入格式】 输入一行包含一个单词,单词只由小写英文字母组成。

【输出格式】 输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。 第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

【样例输入】 lanqiao

【样例输出】 a 2

【样例输入】 longlonglongistoolong

【样例输出】 o 6

【评测用例规模与约定】 对于所有的评测用例,输入的单词长度不超过 1000。

// 第十一届蓝桥杯 试题 G:单词分析
public class Main { 
        
    public static void main(String[] args) { 
        
        Scanner scanner = new Scanner(System.in);
        char[] ch = scanner.nextLine().toCharArray();
        int[] num = new int[26];
        for (int i = 0; i < ch.length; i++) { 
        
            num[ch[i]-'a']++;
        }
        int max = Integer.MIN_VALUE;
        char maxChar = 0 ;
        for (int i = 0; i < num.length; i++) { 
        
            if (num[i] > max) { 
        
                max = num[i];
                maxChar = (char) ('a' <

标签: 二极管pj3306

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台