第十届蓝桥杯Java B省赛真题及解析和扩展


目录

试题A:组队

试题B:不同字串

试题C:数列求和

试题D:数的分解

第十届国赛试题B:平方拆分(DFS)

试题E:迷宫问题(BFS)

青蛙跳杯子(BFS)

试题F:特别数之和

试题G:外卖店优先级

试题H:人物相关性分析(正则表达式)

试题I:后缀表达式(递归)

李白喝酒问题(递归)


试题A:组队

问题描述:

          作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。 每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?

 

package BBC;
import java.util.Scanner;
public class Main {

	
	public static void main(String[] args) {
	int max_count=0;
	int max=0;
	int M[][]=new int[20][6];
	Scanner S=new Scanner(System.in);
	for(int i=0;i<M.length;i++){
		for(int j=0;j<M[1].length;j++){
			M[i][j]=S.nextInt();
		}
	}
	for(int i=0;i<20;i++)
	{
		for(int j=0;j<20;j++){
			
			for(int k=0;k<20;k++){
				
				for(int l=0;l<20;l++){
					
					for(int m=0;m<20;m++){
						
						if(i!=j&&i!=k&&i!=l&&i!=m&&j!=k&&j!=l&&j!=m&&k!=l&&k!=m&&l!=m){
							 max=M[i][1]+M[j][2]+M[k][3]+M[l][4]+M[m][5];
						}
						if(max>max_count){
							max_count=max;
						}
					}
				}
			}
		}
	}
		
	System.out.println(max_count);	
		
		
	

	}

}

试题B:不同字串

package BBC;

import java.util.HashSet;

public class Main {

	public static void main(String[] args) {
	HashSet HS=new HashSet();                //HashSet中元素唯一无序
	String S="0100110001010001";
	for(int step=0;step<S.length();step++){
		
		for(int begin=0,end=1+step;end<=S.length();begin++,end++){
			
			HS.add(S.substring(begin, end));
		}
	}
	System.out.println(HS.size());
	
	}
    
}

子串分值和

【问题描述】
对于一个字符串 S ,我们定义 S 的分值 f (S ) 为 S 中出现的不同的字符个
数。例如 f (”aba”) = 2, f (”abc”) = 3, f (”aaa”) = 1。
现在给定一个字符串 S [0…n − 1](长度为 n),请你计算对于所有 S 的非空
子串 S [i… j](0 ≤ i ≤ j < n), f (S [i… j]) 的和是多少。

【输入格式】
输入一行包含一个由小写字母组成的字符串 S 。

【输出格式】
输出一个整数表示答案。

【样例输入】
ababc

【样例输出】
28

【样例说明】
【评测用例规模与约定】

对于 20% 的评测用例,1 ≤ n ≤ 10;
对于 40% 的评测用例,1 ≤ n ≤ 100;
对于 50% 的评测用例,1 ≤ n ≤ 1000;
对于 60% 的评测用例,1 ≤ n ≤ 10000;
对于所有评测用例,1 ≤ n ≤ 100000。

package BBC;

import java.util.HashSet;

import java.util.Scanner;

public class Main{

public static void main(String args[]){
	
	Scanner SC=new Scanner(System.in);
	
	String S=SC.next();
	
	HashSet HS=new HashSet();
	
	int begin=0;
	
	int end=0;
	
	int sum=0;
	
	for(int step=0;step<S.length();step++){
		
		for(begin=0,end=1+step;end<=S.length();begin++,end++){
			
			String ST=S.substring(begin,end);
			
			String STR[]=ST.split("");
			
			for(int i=0;i<STR.length;i++){
				
				HS.add(STR[i]);
			}
			sum+=HS.size();
			
			HS=new HashSet();
		}
	
}
	
	System.out.println("sum:"+sum);
}}

试题C:数列求和

package BBC;


public class Main{
	
	
	public static void main(String[] args){
		int temp=0;
		int a=1;
		int b=1;
		int c=1;
		for(int i=4;i<=20190324;i++){
			
			temp=(a+b+c)%10000;
			a=b;
			b=c;
			c=temp;
			
		}
		System.out.println(temp);
		
		
		
		
	}
}

试题D:数的分解

package BBC;

public class Main{
	
	public static void main(String[] args){
		int count=0;
		for(int i=1;i<2019;i++){
			if((i+" ").indexOf('2')!=-1||(i+" ").indexOf('4')!=-1)
				continue;
			for(int j=i+1;j<2019;j++){
				if((j+" ").indexOf('2')!=-1||(j+" ").indexOf('4')!=-1)
					continue;
				for(int k=j+1;k<2019;k++){
					if((k+" ").indexOf('2')!=-1||(k+" ").indexOf('4')!=-1)
						continue;
					if(i+j+k==2019){
						count++;
					}
					
				}
			}
		}
		
		System.out.println(count);
	}
}

第十届国赛试题B:平方拆分(DFS)

【问题描述】
          将 2019 拆分为若干个两两不同的完全平方数之和,一共有多少种不同的方法?注意交换顺序视为同一种方法,例如 13^ 2 + 25^ 2 + 35^ 2 = 2019 13^ 2 + 35^ 2 + 25^2 = 2019 视为同一种方法。
package BBC;

public class Main{
	
	public static int count=0;
	
	public static void dfs(int min,int max,int num){
		
		if(num<0){
			return ;
		}
		
		if(num==0){
			
			count++;
			
			return ;
		}
		
		for(int i=min;i<max;i++){
		
		dfs(i+1,max,num-i*i);
	}
		
	}
	
	
	public static void main(String[] args){
		
		
		dfs(0,45,2019);
		
		System.out.println("count:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值