校内模拟赛

1、请问在 1 到 2020 中,有多少个数既是 4 的整数倍,又是 6 的整数倍

package compus_test;
// question 1
//请问在 1 到 2020 中,有多少个数既是 4 的整数倍,又是 6 的整数倍
public class Demo_01 {

	public static void main(String[] args) {
		int count = 0;
		for (int i = 1; i < 2021; i++) {
			if (i % 4 == 0 && i % 6 == 0) {
				count++;
			}
		}
		System.out.println(count);
	}

}

2、小明要用二进制来表示 1 到 10000 的所有整数,要求不同的整数用不同的
二进制数表示,请问,为了表示 1 到 10000 的所有整数,至少需要多少个
二进制位?

package compus_test;
//question 2
//小明要用二进制来表示 1 到 10000 的所有整数,要求不同的整数用不同的
//二进制数表示,请问,为了表示 1 到 10000 的所有整数,至少需要多少个
//二进制位?
public class Demo_02 {

	public static void main(String[] args) {
		System.out.println(Math.pow(2, 14));
		//即14
	}

}

3、请问有多少个序列满足下面的条件:
1.序列的长度为 5。
2.序列中的每个数都是 1 到 10 之间的整数。
3 序列中后面的数大于等于前面的数。

public class Demo_03 {

	public static void main(String[] args) {
//		//从内部进行快速迭代比从条件上约束效率更高
		int count = 0;
		for (int number1 = 1; number1 <= 10; number1++) {
			for (int number2 = number1; number2 <= 10; number2++) {
				
				for (int number3 = number2; number3 <= 10; number3++) {
					
					for (int number4 = number3; number4 <= 10; number4++) {
						
						for (int number5 = number4; number5 <= 10; number5++) {
							count++;
						}
					}
				}
			}
		}
		
		
		System.out.println(count);
		//一秒时间
//		
//		int count2 = 0;
//		
//		for (int number1 = 1; number1 <= 10; number1++) {
//			for (int number2 = 1; number2 <= 10; number2++) {
//				if (number2 < number1) {
//					continue;
//				}
//				for (int number3 = 1; number3 <= 10; number3++) {
//					if(number3 < number2) continue;
//					for (int number4 = 1; number4 <= 10; number4++) {
//						if(number4 < number3) continue;
//						for (int number5 = 1; number5 <= 10; number5++) {
//							if(number5 < number4) continue;
//							count2++;
//						}
//					}
//				}
//			}
//		}
//		
//		System.out.println(count2);
		//一秒不到

	}

}

4、一个无向图包含 2020 条边,如果图中没有自环和重边,请问最少包含多
少个结点?

package compus_test;
//question 4
//一个无向图包含 2020 条边,如果图中没有自环和重边,请问最少包含多
//少个结点?
//公式 无向图变数 n = (m * (m - 1)) / 2;
public class Demo_04 {

	public static void main(String[] args) {
		int n = 2020;
		
		for (int i = 60; i < 71; i++) {
			System.out.println((i * (i - 1)) / 2  + " i " + i);
		}
		
		

	}

}

5、两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的
距离为2,L 和 Q 的距离为 5。对于一个字符串,我们称字符串中两两字
符之间的距离之和为字符串的内部距离。例如:ZOO 的内部距离为 22,其
中 Z 和 O 的距离为 11。请问,LANQIAO 的内部距离是多少?

package compus_test;
//question 5
//两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的
//距离为2,L 和 Q 的距离为 5。对于一个字符串,我们称字符串中两两字
//符之间的距离之和为字符串的内部距离。例如:ZOO 的内部距离为 22,其
//中 Z 和 O 的距离为 11。请问,LANQIAO 的内部距离是多少?

public class Demo_05 {

	public static void main(String[] args) {
		String chaString = "LANQIAO";
		int sum = 0;
		char[] cha = chaString.toCharArray();
		
		for (int i = 0; i < cha.length; i++) {
			for (int j = i; j < cha.length; j++) {
				sum += Math.abs(cha[j] - cha[i]);
			}
		}
		System.out.println(sum);
	}

}

6、题目描述
给定一个平行四边形的底边长度 l和高度 h,求平行四边形的面积。
输入格式
输入的第一行包含一个整数 l,表示平行四边形的底边长度。
第二行包含一个整数 h,表示平行四边形的高。
输出格式
输出一个整数,表示平行四边形的面积。(提示:底边长度和高都是整数的平行四边形面积为整数)
样例输入

2
7
样例输出

14

数据规模和约定
对于所有评测用例:1 ≤ l , h ≤ 100

package compus_test;
//question 6
//编程题
//题目描述
//给定一个平行四边形的底边长度 l和高度 h,求平行四边形的面积。
//输入格式
//输入的第一行包含一个整数 l,表示平行四边形的底边长度。
//第二行包含一个整数 h,表示平行四边形的高。
//输出格式
//输出一个整数,表示平行四边形的面积。(提示:底边长度和高都是整数的平行四边形面积为整数)
//样例输入
//
//2
//7
//样例输出
//
//14
//
//数据规模和约定
//对于所有评测用例:1 ≤ l , h ≤ 100

import java.util.Scanner;

public class Demo_06 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//输出长度
		int l = sc.nextInt();
		//输入高度
		int h = sc.nextInt();
		
		System.out.println(l * h);
	}

}

7、题目描述
现在时间是 a 点 b 分,请问 t分钟后,是几点几分?
输入格式
输入的第一行包含一个整数 a 。
第二行包含一个整数 b 。
第三行包含一个整数 t 。
输出格式
输出第一行包含一个整数,表示结果是几点。
第二行包含一个整数,表示结果是几分。
样例输入

3
20
165
样例说明

6
5

数据规模和约定
对于所有评测用例:0≤a≤23,0≤b≤59,0≤t,t 分钟后还是在当天。

package compus_test;

import java.util.Scanner;

//第七题
//现在时间是 a 点 b 分,请问 t分钟后,是几点几分?
public class Demo_09 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();//时钟
		int b = sc.nextInt();//分钟
		int t = sc.nextInt();//t分钟后
		
		System.out.println(a  + (t + b) / 60);
		System.out.println((t + b) % 60);
		
		
	}

}

8、题目描述
小蓝负责花园的灌溉工作。
花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。
小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。
每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。
给定花园水管的位置,请问 k 分钟后,有多少个方格被灌溉好?
输入格式
输入的第一行包含两个整数 n , m。
第二行包含一个整数 t ,表示出水管的数量。
接下来 t 行描述出水管的位置,其中第 i 行包含两个数 r , c 表示第 r 行第 c 列有一个排水管。
接下来一行包含一个整数 k。
输出格式
输出一个整数,表示答案。
样例输入

3 6
2
2 2
3 4

样例输出

9

样例说明
用1表示灌溉到,0表示未灌溉到。
打开水管时:
  000000
  010000
  000100
1分钟后:
  010000
  111100
  011110
  共有9个方格被灌溉好。
数据规模和约定  
对于所有评测用例:1 <= n, m <= 100, 1 <= t <= 10, 1 <= k <= 100。
将最初水龙头的位置标记,存入队列,再用一个队列存储下一分钟蔓延的位置,每分钟结束,更新队列中的元素,最后输出在规定时间内灌溉的位置有多少个即可。

package compus_test;

import java.util.Arrays;
import java.util.Scanner;
//question 8
//小蓝负责花园的灌溉工作
public class Demo_07 {
	static int[] fx = {-1, 1, 0, 0};//左右上下
	static int[] fy = {0, 0, -1, 1};
	static int count = 0;
	static int[][] array;
	static int[][] position;
	static int[][] temp;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//n行
		int n = sc.nextInt();
		//m列
		int m = sc.nextInt();
		//数组
		array = new int[n][m];
		//临时存储
		temp = new int[n][m];
		//水管数量
		int t = sc.nextInt();
		position = new int[t][2];
		//传入水管坐标
		for (int i = 0; i < position.length; i++) {
			position[i][0] = sc.nextInt();
			position[i][1] = sc.nextInt();
		}
		
		//时间
		int k = sc.nextInt();
		
		//初始化
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				initialize(i, j);
			}
//			System.out.println(Arrays.toString(array[i]));
		}
		
		change(k,temp);
		//显示
		display();
		
//		for (int i = 0; i < temp.length; i++) {
//			System.out.println(Arrays.toString(temp[i]));
//		}
		//关闭
		sc.close();
		
	}
	//对矩阵进行初始化
	public static void initialize(int i, int j) {
		for (int k = 0; k < position.length; k++) {
			//当该位置与用户输入的位置相同时,将该位置填充为1
			if (position[k][0] == i+1 && position[k][1] == j+1) {
				array[i][j] = 1;
			}
		}
	}
	
	public static void change(int k,int[][] temp) {
		//执行k分钟
		for (int i = 0; i < k; i++) {
			//遍历矩阵
			for (int row = 0; row < array.length; row++) {
				for (int col = 0; col < array[row].length; col++) {
					//如果该位置的值等于1
					if (array[row][col] == 1) {
						temp[row][col] = 1;
						//对该位置四个方向进行填充
						for (int j = 0; j < fx.length; j++) {
							//判断边界
							if ((row + fy[j] >= 0 && row + fy[j] < array.length) && (col + fx[j] >= 0 && col + fx[j] < array[row].length)) {
								//填充1
								temp[row + fy[j]][col + fx[j]] = 1;
							}
						}
					}
				}
			}
		}
	}
	//对值为1的位置进行计数
	public static void display() {
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				if (temp[i][j] == 1) {
					count++;
				}
			}
		}
		//显示结果
		System.out.println(count);
	}

}

9、题目描述
小蓝有一张黑白图像,由 n ∗ m 个像素组成,其中从上到下共 n 行,每行从左到右 m列。每个像素由一个 0 到 255 之间的灰度值表示。
现在,小蓝准备对图像进行模糊操作,操作的方法为:
对于每个像素,将以它为中心 3 * 3 区域内的所有像素(可能是 9 个像素或少于 9 个像素)求和后除以这个范围内的像素个数(取下整),得到的值就是模糊后的结果。
请注意每个像素都要用原图中的灰度值计算求和。
输入格式
输入的第一行包含两个整数 n , m。
第 2 行到第 n + 1 行每行包含 m个整数,表示每个像素的灰度值,相邻整数之间用一个空格分隔。
输出格式
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔,表示模糊后的图像。
样例输入

3 4
0 0 0 255
0 0 255 0
0 30 255 255

样例输出

0 42 85 127
5 60 116 170
7 90 132 191

数据规模和约定
对于所有评测用例,1 <= n, m <= 100。
扩展有8个方向扩展,然后以当前这个点为中心向 8 个方向扩展即可,最后按照题意求模糊值。

package compus_test;
//question 9
import java.util.Scanner;

//模糊处理
public class Demo_10 {
	//上下左右,左上,右上,右下,左下
	static int[] fy = {-1, 1, 0, 0, -1, -1, 1, 1};
	static int[] fx = {0, 0, -1, 1, -1, 1, 1, -1};
	static int[][] array;
	static int[][] temp;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//m行,n列
		int n = sc.nextInt();
		int m = sc.nextInt();
		
		array = new int[n][m];
		temp = new int[array.length][array[0].length];
		//对矩阵进行初始化
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				array[i][j] = sc.nextInt();
			}
		}
		//模糊化处理
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				change(i, j);
			}
		}
		//显示矩阵
		for (int i = 0; i < temp.length; i++) {
			for (int j = 0; j < temp[i].length; j++) {
				System.out.print(temp[i][j] + " ");
			}
			System.out.println();
		}
		
		

	}
	private static void change(int i, int j) {
		//求和
		int sum = array[i][j];
		//计数
		int count = 1;
		
		for (int k = 0; k < fy.length; k++) {
			//判断是否在边界内
			if ((i + fy[k] >= 0 && i + fy[k] < array.length) && (j + fx[k] >= 0 && j + fx[k] < array[i].length)) {
					//计算八个方向的和
					sum += array[i + fy[k]][j + fx[k]];
					//并计数
					count++;
			}
		}
		//求平均值并将值赋给新的矩阵
		int average = sum / count;
		temp[i][j] = average;
		
		
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值