2019第十一届蓝桥杯校内模拟赛JAVA组

第一题:
2019的二进制

package lq;
public class A {
	public static void main(String[] args) {
		System.out.println(Integer.toBinaryString(2019));
	}
}

第二题:
1200000的所有约数,暴力破

package lq;
import java.util.Scanner;
public class B {
	public static void main(String[] args) {
		int count=0;
		for(int i=1;i<=Math.sqrt(1200000);i++){
			if((1200000/i)*i==1200000){
				count++;
			}
		}
		System.out.println(count*2);
		System.out.println(Math.sqrt(1200000));
	}
}

第三题:
2019节点无向图最少边,
一个点做中心,
其他2018点围绕在它旁边,
每个点对应一条边,
中心点没有,
2019-1=2018
第四题:
1-2019内含9的数量,暴力破

package lq;

public class D {
	public static int count=0;
	public static boolean check(int n){
		while(n>0){
			if(n%10==9)return true;
			n/=10;
		}
		return false;
	}
	public static void main(String[] args) {
		for(int i=0;i<=2019;i++){
			if(check(i)){
				count++;
			}
		}
		System.out.println(count);
	}
}

第五题:
求字符串中元辅音字母的数量,暴力破

package lq;

import java.util.Scanner;

public class E {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String s=sc.nextLine();
		char c[]=s.toCharArray();
		int y=0,f=0;
		for(int i=0;i<c.length;i++){
			if(c[i]=='a'||c[i]=='e'||c[i]=='i'||c[i]=='o'||c[i]=='u')y++;
			else f++;
		}
		System.out.println(y);
		System.out.println(f);
	}
}

第六题:
有n个数,求其中任意两个数组成m的倍数的倍数对有多少个?
暴力破

package lq;

import java.util.Scanner;

public class F {
	public static void main(String[] args) {
		int count=0;
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int m=sc.nextInt();
		int arr[]=new int [n];
		for(int i=0;i<n;i++){
			arr[i]=sc.nextInt();
			arr[i]%=m;
		}
		for(int i=0;i<n;i++){
			for(int j=i+1;j<n;j++){
				if(arr[i]+arr[j]==0||arr[i]+arr[j]==m){
					count++;
				}
			}
		}
		System.out.println(count);
	}
}

第七题:
找出1~n内各个位上没有重复数字的个数
暴力破

package lq;

import java.util.Scanner;

public class G {
	public static boolean check(int i){
		int arr[]=new int[10];
		while(i>0){
			arr[i%10]++;
			i/=10;
		}
		for(int j=0;j<10;j++)
			if(arr[j]>1) return false;
		return true;
	}
	public static void main(String[] args) {
		int count=0;
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		for(int i=1;i<=n;i++)
			if(check(i)) count++;
		System.out.println(count);
	}
}

第八题:
梅花桩
从(1,1)走到(m,n),最大移动距离为d,求最少移动次数
dfs深搜暴力解;

package lq;

import java.util.Scanner;

public class H {
	public static int min=Integer.MAX_VALUE;
	public static int n,m;
	public static double d;
	public static void dfs(int x,int y,int step){
		if(x>n||y>m||step>min){
			return;
		}else if(x==n&&y==m){
			min=min<step?min:step;
		}else{
			for(int i=0;i<=d;i++){
				for(int j=0;j<=d;j++){
					if((i*i+j*j)<=(d*d)&&(i*i+j*j)>0){
						dfs(x+i,y+j,step+1);
					}
				}
			}
		}
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		m=sc.nextInt();
		d=sc.nextDouble();
		dfs(1,1,0);
		System.out.println(min);
	}
}

第九题:
花店运花
nm矩阵分成两部分
n
(m-x)和n*x;
暴力求解

package lq;

import java.util.Scanner;

public class I {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		long mi=200000000L;
		int cur=0;
		int sum=0;
		int n=sc.nextInt(),m=sc.nextInt();
		int arr[][]=new int[n][m];
		int ans[]=new int[m];
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				arr[i][j]=sc.nextInt();
				sum+=arr[i][j];
				ans[j]+=arr[i][j];
			}
		}
		for(int i=0;i<ans.length;i++){
			cur+=ans[i];
			mi=mi<Math.abs(sum-cur-cur)?mi:Math.abs(sum-cur-cur);
		}
		System.out.println(mi);
	}
}

第十题:
我有点质疑这个题,当然,极有可能是我做错了,
题意是len=两点间距离(考虑坐标和高度);
可是我考虑高度过样例是错的
而不考虑高度,仅考虑坐标,求解样例的答案确是正确的,
emmm。。可能错了,
写下代码吧。

package lq;

import java.util.Scanner;
public class J {
	public static double maxlen=-1;
	public static double buf[][];
	public static void dfs(int cur,double len,boolean b[]){
		for(int j=0;j<buf[cur].length;j++)
			if(buf[cur][j]>0){
				b[j]=true;
				dfs(j,len+buf[cur][j],b);
			}
		boolean ok=true;
		for(int i=0;i<b.length;i++)
			if(!b[i])ok=false;
		if(ok)maxlen=maxlen>len?maxlen:len;
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int node[][]=new int[n][3];//x,y,h
		for(int i=0;i<n;i++)
			for(int j=0;j<3;j++)
				node[i][j]=sc.nextInt();
		int d=sc.nextInt();
		double xyz=-1;
		buf=new double[n][n];
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++){
				xyz=Math.sqrt((node[i][0]-node[j][0])*(node[i][0]-node[j][0])+(node[i][1]-node[j][1])*(node[i][1]-node[j][1]));
				if(xyz<=d&&node[i][2]>node[j][2])buf[i][j]=xyz;
			}
		boolean b[]=new boolean [n];
		b[0]=true;dfs(0,0,b);
		System.out.println(String.format("%.2f",maxlen));
	}
}

你可能感兴趣的:(蓝桥杯,校选赛,校内模拟赛,蓝桥杯,第十一届蓝桥杯校内选拔赛,算法基础)