2020第十一届蓝桥杯第二场JavaB组

第一题:门牌制作(624)

题目大意:

  • 判断1到2020里面共有多少个‘2’;

解析:

  • 本题简而言之就是找‘2’这一个数
  • 第一种方法:遍历将其转换为字符然后再遍历寻找
  • 第二种方法:直接用数值的方法进行计算

以下为运行成功的代码 :

/*
 * 第一题:判断1到2020里面共有多少个‘2’
 * @ac
 */

/*
 * 第一种方法:先将其转换为字符,然后再遍历寻找
 * 第二种:直接用数值的方法进行计算
 */
//public class test01 {
//
//	public static void main(String[] args) {
//		// TODO Auto-generated method stub
//
//		int ans=0;
//		char ch[] = null;
//		for (int i = 1; i <=2020; i++) {
//			ch=Integer.toString(i).toCharArray();
//			for (int j = 0; j < ch.length; j++) {
//				if(ch[j]=='2')
//					ans++;
//			}
//		}
//		System.out.println(ans);
//	}
//
//}


public class test01{
	public static void main(String[] args) {
		int ans=0;
		for (int i = 1,n=1; i <=2020;n=++i) {
			do {
				if(n%10==2)
					ans++;
			}
			while((n/=10)>0);
		}
		System.out.println(ans);
	}
}

第二题:寻找2020(16520)

题目大意:

  • 简而言之即:在一个数字矩阵里面找2020,同一行从左到右,同一列从上到下,斜线上左上到右下构成

解析:

  • 在输入数据的时候可以采用原始的方式从键盘输入,或者熟悉输入流导入
  • 层层暴力遍历寻找满足条件的数,感觉暴力出奇迹哈哈哈

以下是运行成功的代码:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

/*
 * 寻找2020,在一个数字矩阵里找2020,同一行从左到右,同一列
 * 从上到下,斜线上左上到右下构成
 * @ac
 */
import java.util.Scanner;

public class test02{

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);//采用的直接从键盘输入方式
        int[][] num = new int[305][305];
        for (int i=1;i<=300;i++) {
            String str = in.next();
            for (int j=1;j<=str.length();j++) {
                num[i][j] = str.charAt(j-1) - '0';//得到相应的整数
            }
        }
        
        int ans = 0;
        for (int i=1;i<=300;i++) {
            for (int j=1;j<=300;j++) {
                if (i+3<=300 && num[i][j]==2 && num[i+1][j]==0 && num[i+2][j]==2 && num[i+3][j]==0)
                    ans++;
            }
        }
        
        for (int i=1;i<=300;i++) {
            for (int j=1;j<=300;j++) {
                if (j+3<=300 && num[i][j]==2 && num[i][j+1]==0 && num[i][j+2]==2 && num[i][j+3]==0)
                    ans++;
            }
        }
        
        for (int i=1;i<=300;i++) {
            for (int j=1;j<=300;j++) {
                if (i+3<=300 && j+3<=300 && num[i][j]==2 && num[i+1][j+1]==0 && num[i+2][j+2]==2 && num[i+3][j+3]==0)
                    ans++;
            }
        }
        System.out.println(ans);

    }
}

第三题:蛇形填数(761)

题目大意:

  • 根据以下的图形以及数值,我们可以知道第二行第二列的数值为5,现在求第20行第20列的数值为多少?
 /*
 * 蛇形填数:
 * 1  2  6  7  15 ...
 * 3  5  8  14 ...
 * 4  9  13 ...
 * 10 12 ...
 * 11 ...
 * ...
 * 
 * @ac
 */

解析:

找规律:
 
 行(a)    第i行第i列的那个数值前面有几条斜线(b)     所在位置的数值(c)
 
 
 a        b          c
 1        1          1 
 2        2          5
 3        4          13
 4        6          25 
 5        8          41
 6        10         61
 ...      ...        ...
 20      20*2-2      20*38+1=761
 
 解析:
 发现a与b的关系为a*2-b
 这三者的关系为:a*b+1=c

第六题:

题目大意

/*
 * 成绩分析:
 * 求最高分、最低分、平均分
 * 
 * 输入格式:
 * 第一行一个整数n,表示考试人数
 * 接下里n行,每行包含一个0到100的整数,表示一个学生的得分
 * 
 * 输出格式:
 * 输出三行
 * 第一行一个整数表示最高分
 * 第二行一个整数表示最低分
 * 第三行一个实数、四舍五入保留正好两位小数,表示平均分
 */

以下为运行成功的代码:

import java.util.Arrays;
import java.util.Scanner;

/*
 * 成绩分析:
 * 求最高分、最低分、平均分
 * 
 * 输入格式:
 * 第一行一个整数n,表示考试人数
 * 接下里n行,每行包含一个0到100的整数,表示一个学生的得分
 * 
 * 输出格式:
 * 输出三行
 * 第一行一个整数表示最高分
 * 第二行一个整数表示最低分
 * 第三行一个实数、四舍五入保留正好两位小数,表示平均分
 */
public class test06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner (System.in);
		int n=in.nextInt();int a;
		int max=Integer.MIN_VALUE,min=Integer.MAX_VALUE;
		double sum=0;
		for (int i = 0; i < n; i++) {
			a=in.nextInt();
			sum+=a;
			if(a>max)
				max=a;
			if(min>a)
				min=a;
		}
		
		System.out.println(max);
		System.out.println(min);
		System.out.println(String.format("%.2f",sum/n));
	}

}

第七题:

题目大意:

版权声明:本文为lwyy1223-原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lwyy1223-/p/14365909.html