当前位置: 首页 > >

蓝桥杯--国赛题

发布时间:

1.将 2019 拆分为若干个两两不同的完全*方数之和,一共有多少种不同的方法?
注意交换顺序视为同一种方法,例如 132 + 252 + 352 = 2019 与 132 + 352 +252 = 2019 视为同一种方法。


static int count =0;
public static void main(String[] args) {
dfs(0, 45, 2019);
System.out.println(count);

}

private static void dfs(int begin, int end, int num) {


if (num < 0) {
return ;
}

if (num == 0) {
count++;
return;
}

for (int i=begin;i

dfs(i+1,end,num-i*i);
}


}

2.序列求和
* 学*了约数后,小明对于约数很好奇,他发现,给定一个正整数 t,总是可以找到含有 t 个约数的整数。小明对于含有 t 个约数的最小数非常感兴趣,并把它定义为 S t。
* 例如 S 1 = 1, S 2 = 2, S 3 = 4, S 4 = 6,? ? ? 。
* 现在小明想知道,前 60 个 S i 的和是多少?即 S 1 + S 2 + ? ? ? + S 60 是多少?


public static void main(String[] args) {

int count=1;
List list = new ArrayList<>();
list.add(1);
int n = 1;

for (int i=2;i<100000;i++){
int x = i;

if (x-1==list.get(list.size()-1)) {
n++;

count++;
if (count == 60) {
break;
}

}

dfs1(n,x,list);

}

long sum = 0;

for (Integer e:list){
sum+=e;

}

System.out.println(sum);

}


private static void dfs1(int n,int x, List list) {
int s = 1;
for (int j=1;j<=x/2;j++){

if (x % j == 0) {
s++;
if (s==n){
list.add(x);
break;
}

}

}

}


3.最长子序列
* 我们称一个字符串 S 包含字符串 T 是指 T 是 S 的一个子序列,即可以从字符串 S 中抽出若干个字符,它们按原来的顺序组合成一个新的字符串与 T 完全一样。
* 给定两个字符串 S 和 T,请问 T 中从第一个字符开始最长连续多少个字符被 S 包含?


public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String S = sc.next();
String T = sc.next();

int i=0;
int j=0;
while (j
if (T.charAt(i)==S.charAt(j)){
i++;
j++;
}else {
j++;
}

}

System.out.println(i);

}



友情链接: