第十一届蓝桥杯校内选拔赛

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

((()))()*2
(()())()*2
(())(())
(())()()*3
(()()())
((())())*2
((()()))
(((())))
()()()()
2+2+1+3+1+2+1=14

在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;

public class t5 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//接收键盘输入
		String str = in.next();
		//单词中的所有字母都在字母表上向后偏移3位,
		//a-w只需要将每个字符的ASCII码值+3,xyz需要特殊处理,
		//x-a y-b z-c
		//转换为字符数组处理
		char[] ch = str.toCharArray();
		//遍历数组,将每个元素的ASCII值+3,判断是否为xyz若有转为相应字母
		for(int i=0;i<ch.length;i++) {
			if(ch[i]>='x') {
				if(ch[i]=='x') {
					ch[i] = 'a';
				}
				if(ch[i]=='y') {
					ch[i] = 'b';
				}
				if(ch[i]=='z') {
					ch[i] = 'c';
				}
			}else {
				ch[i] = (char)((int)ch[i]+3);
			}
		}
		
		for(int i=0;i<ch.length;i++) {
			System.out.print(ch[i]);
		}
	}
}

在这里插入图片描述

import java.util.Scanner;

public class t6 {
	public static void main(String[] args) {
		//一个数的数位不包含数字 2,小明将它称为洁净数。
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int count = 0;
		for(int i=1;i<=n;i++) {
			//取余是否含有2
			if(f(i)) {
				count++;
			}
		}
		System.out.println(n-count);
	}
	public static boolean f(int i) {
		int temp2 = i;
		while(temp2 != 0) {
			int temp = temp2%10;
			//计数
			if(temp == 2) {
				return true;
			}
			temp2 = temp2/10;
		}
		return false;
	}
}

在这里插入图片描述

import java.util.Scanner;

public class t7 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//整数n
		int n = in.nextInt();
		//给定数列数组
		int[] arra = new int[n];
		for(int i=0;i<arra.length;i++) {
			arra[i] = in.nextInt();
		}
		
		//按照给定公式for循环定义下标i j 
		//利用两层for循环进行两两元素的比较,
		int max = 0;
		for(int i=0;i<arra.length-1;i++) {
			for(int j=i+1;j<arra.length;j++) {
				//给定公式 |i-j|+|a_i-a_j|
				int ans = Math.abs(i-j)+Math.abs(arra[i]-arra[j]);
				//if条件判断最大数
				if(ans>max) {
					max = ans;
				}
			}
		}
		System.out.println(max);
	}
}

在这里插入图片描述

import java.util.Scanner;

public class t8 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//整数n
		int n = in.nextInt();
		//n行2列星星数组
		int[][] arra = new int[n][2];
		for(int i=0;i<n;i++) {
			for(int j=0;j<2;j++) {
				arra[i][j] = in.nextInt();
			}
		}
		// 已知条件x_i < x_j < x_k 且 y_j < y_i 且 y_j < y_k 时,这三颗星星就组成了一个大 V。
		//x_i < x_j < x_k--->arra[i][0]<arra[j][0]<arra[k][0]
		//y_j < y_i -->arra[j][1]<arra[i][1]
		//y_j < y_k -->arra[j][1]<arra[k][1]
		int count = 0;
		for (int i = 0; i < arra.length; i++) {
			for (int j = 0; j < arra.length; j++) {
				for (int k = 0; k < arra.length; k++) {
					if( arra[i][0]<arra[j][0] &&
						arra[j][0]<arra[k][0] &&
						arra[j][1]<arra[i][1] &&
						arra[j][1]<arra[k][1]) {
						count++;
					}
				}
			}
		}
		System.out.println(count);
	}
}

在这里插入图片描述

import java.util.Scanner;

public class t9 {
	static int arra[]; 
	public static void main(String[] args) {
		//奇数项都比前一项大,偶数项都比前一项小
		Scanner in = new Scanner(System.in);
		//整数m
		int m = in.nextInt();
		//整数n
		int n = in.nextInt();
		//开数组
		arra = new int[m];
		dfs2(m, n, 0);
	}
	
//	public static void dfs(int m, int n) {
//		for(int i=1;i<=n;i++) {
//			for(int j=1;j<=n;j++) {
//				for(int k=1;k<=n;k++) {
//					if(j<i && j<k) {
//						System.out.println(i+" "+j+" "+k);
//					}
//				}
//			}
//		}
//	}
	
	//位置1的数字要比位置0 3的数字小
	public static void dfs2(int m, int n, int step) {
		if(step>=m) {
			for(int i=1;i<m;i+=2) {
				//当数组长度是偶数是会产生下标i+1越界,如何解决呢
				if(arra.length%2 == 0) {
					//是否到达临界值i = len-1
					if(i == arra.length-1) {
						if(arra[i]<arra[i-1]) {
							//输出数组内容
							for(int j=0;j<m;j++) {
								System.out.print(arra[j]+" ");
							}
							System.out.println();
						}
					}else {
						if(arra[i]<arra[i-1] && arra[i]<arra[i+1]) {
							continue;
						}else {
							break;
						}
					}
				}else {
					//数组的长度为奇数
					//满足题目所说条件
					if(arra[i]<arra[i-1] && arra[i]<arra[i+1]) {
						//是否遍历到倒数第二个元素
						if(i==arra.length-2) {
							//输出数组内容
							for(int j=0;j<m;j++) {
								System.out.print(arra[j]+" ");
							}
							System.out.println();
						}
					}else {
						break;
					}
				}
			}
			return;
		}
		for(int i=1;i<=n;i++) {
			arra[step] = i;
			dfs2(m, n, step+1);
		}
	}
}

在这里插入图片描述

/**
 * 最少消耗,最小生成树
 */
import java.util.Scanner;

public class t10 {
	
	int u;//顶点u
	int v;//顶点v
	double w;//边w
	
	//并查集所需三个变量
	static int[] f;
	static double sum;//走过边的距离之和
	static int count;//边的个数
	
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//n个村庄
		int n = in.nextInt();
		//接收村庄坐标位置
		int[][] arra = new int[n][3];
		for(int i=0;i<n;i++) {
			for(int j=0;j<3;j++) {
				arra[i][j] = in.nextInt();
			}
		}
		//第一个村庄建立发电站
		f(arra,n);
	}
	
	public static void f(int[][] arra, int n) {
		//存放起始点,终点,边的长度
		t11[] lenArra = new t11[n*n*n];
		//记录存放元素个数
		int index = 0;
		//求任意两点间的距离
		for(int i=0;i<arra.length-1;i++) {
			for (int j=i+1;j<arra.length;j++) {
				//自己不能连自己
				if(i != j) {
					double len = Math.sqrt((arra[i][0]-arra[j][0])*(arra[i][0]-arra[j][0])+
							(arra[i][1]-arra[j][1])*(arra[i][1]-arra[j][1]))+
							(arra[i][2]-arra[j][2])*(arra[i][2]-arra[j][2]);
					
					lenArra[index] = new t11();
					lenArra[index].u = i;
					lenArra[index].v = j;
					lenArra[index].w = len;
					index++;
					//System.out.println(i+"---"+j+"---"+len);
				}
			}
		}
		
		//对数组lenArra由小到大进行排序
		bubbleSort(index, lenArra);
		
		//初始化,自己是自己的老板
		f = new int[n+1];
		for(int i=0;i<f.length;i++) {
			f[i] = i;
		}
		
		//从最小的边开始选,依次选择每一条边,直到选择了n-1条边让整个图都连通为止
		for(int i=0;i<index;i++) {
			//判断两个顶点是否已经连通,即判断是否已在同一个集合当中
			if(merge(lenArra[i].u, lenArra[i].v)) {
				count++;
				sum = sum+lenArra[i].w;
			}
			//边的个数满足要求
			if(count == n-1) {
				break;
			}
		}
		System.out.printf("%.2f",sum);
		
//		for(int i=0;i<index;i++) {
//			System.out.println(lenArra[i].u+"--->"+lenArra[i].v+"-->"+lenArra[i].w);
//		}
	}
	
	/**
	 * 并查集查找共同祖先
	 * @param v 顶点
	 * @param u 顶点
	 * @return 若返回值为true,表明此时的u v不在一个集合当中此时可以这条边可以加入到总距离,反之不可。
	 */
	public static boolean merge(int v, int u) {
		int t1, t2;
		t1 = getf(v);
		t2 = getf(u);
		//t1 t2 不相等表明此时的u v不在一个集合当中此时可以这条边可用
		if(t1 != t2) {
			return true;
		}
		return false;
	}
	
	/**
	 * 找寻最大boss
	 * @param v
	 * @return
	 */
	public static int getf(int v) {
		if(f[v] == v) {
			return v;
		}else {
			//压缩路径
			f[v] = getf(f[v]);
			return f[v];
		}
	}
	
	/**
	 * 将lenArra中两村之间的距离按照由小到大排序,便于之后遍历元素时由上到下直接选取最小距离
	 * @param index
	 * @param lenArra
	 */
	public static void bubbleSort(int index, t11 lenArra[]) {
		//对数组lenArra由小到大进行排序
		for(int i=0;i<index-1;i++) {
			for(int j=0;j<index-1-i;j++) {
				if(lenArra[j].w>lenArra[j+1].w) {
					double temp = lenArra[j].w;
					lenArra[j].w = lenArra[j+1].w;
					lenArra[j+1].w = temp;
					
					int temp2 = lenArra[j].u;
					lenArra[j].u = lenArra[j+1].u;
					lenArra[j+1].u = temp2;
					
					temp2 = lenArra[j].v;
					lenArra[j].v = lenArra[j+1].v;
					lenArra[j+1].v = temp2;
				}
			}
		}
	}
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值