目录
试题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: