技术综合J卷
60分选择题
2道编程题
题目一好像是:
```java
/**
* @author xin麒
* @date 2024/2/25 16:38
* 第一行输入n
* 第二行输入一串数字,之间用空格隔开
* 每次操作将一些相同的数字和v相加(v可以为负数),计算最小操作次数
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.nextLine());
String[] split = scanner.nextLine().split(" ");
Map<String, Integer> map = new HashMap<>();
for(String s : split){
Integer count = map.get(s);
if (count == null){
map.put(s,1);
}else{
map.put(s,count + 1);
}
}
System.out.println(map.size() - 1);
}
}
```
题目2好像是:
```java
/**
* @author xin麒
* @date 2024/2/25 16:39
* 第一行输入n
* 第二行输入len=n的字符串s,每个字符在['1','9']
* 1可以用a,表示,2可以用b表示 ...... 26可用z表示
* 计算s的所有表示方式
* 例如:
* 2
* 11
* 输出:
* 2
* 解析:
* 11可以用aa来表示,也可以用k来表示,共2中表示方式
*/
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.nextLine());
String s = scanner.nextLine();
//判空
if(n == 0) {
System.out.println();
return ;
}
if(n == 1){
System.out.println(1);
return ;
}//long
long[] nums = new long[n];
nums[0] = 1;
char[] chs = s.toCharArray();
String str = "";
str += chs[0];
str += chs[1];
nums[1] = 1;
if(Integer.parseInt(str) <= 26) nums[1] = 2;
for(int i = 2;i < n;i++){
nums[i] = nums[i - 1] % 1000000007;
str = "";
str += chs[i - 1];
str += chs[i];
if(Integer.parseInt(str) <= 26) {
long tmp = nums[i - 2] % 1000000007;
nums[i] += tmp;
nums[i] %= 1000000007;
}
}
System.out.println(nums[n - 1] %1000000007);
}
}
```