8.21 笔试题答案
题目链接:https://pan.baidu.com/s/1HHFlCsQR8yFB4CRWPW9zIQ
第一题
有个问题:题目要求读入的长度是16进制的,懒得改了,所以大家自己改过来就行
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ArrayList<String> list=new ArrayList<String>();
int n=sc.nextInt();
for(int i=0;i<n-1;i++){
String str=sc.next();
if(str.equals("A")){
list.add("12");
list.add("34");
}else if(str.equals("B")){
list.add("AB");
list.add("CD");
}else{
list.add(str);
}
}
int len=list.size();
list.add(0,String.valueOf(len+1));
for(int i=0;i<list.size();i++){
if(i==0){
System.out.print(list.get(i));
}else{
System.out.print(" "+list.get(i));
}
}
}
}
第2题
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int low= scanner.nextInt();
int high=scanner.nextInt();
int sum1=0;//存储个位数之和
int sum2=0;//存储十位数之和
for(int i=low;i<high;i++){
if(isPrime(i)){
int gewei=i%10;
int shiwei=(i/10)%10;
sum1=sum1+gewei;
sum2=sum2+shiwei;
}
}
System.out.println((int)Math.min(sum1,sum2));
}
//判断是否为质数
private static boolean isPrime(int src) {
double sqrt = Math.sqrt(src);
if (src < 2) {
return false;
}
if (src == 2 || src == 3) {
return true;
}
if (src % 2 == 0) {// 先判断是否为偶数,若偶数就直接结束程序
return false;
}
for (int i = 3; i <= sqrt; i+=2) {
if (src % i == 0) {
return false;
}
}
return true;
}
}
第三题
import leetcode.list.LinkList;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String first= scanner.next();
HashSet<String> set=new HashSet<String>();
LinkedList<String> queue=new LinkedList<String>();
set.add(first);
queue.add(first);
int m= scanner.nextInt();
ArrayList<List<String>> list=new ArrayList<List<String>>();
for (int i = 0; i <m ; i++) {
String[] array=scanner.next().split(",");
ArrayList<String> temp=new ArrayList<String>();
for(int j=0;j<array.length;j++){
temp.add(array[j]);
}
list.add(temp);
}
while (queue.size()!=0){
String temp=queue.poll();
for(int i=0;i<list.size();i++){
ArrayList<String> temp1=(ArrayList<String>) list.get(i);
if(temp1.contains(temp)){
for(int j=0;j<temp1.size();j++){
String temp2=temp1.get(j);
if(!set.contains(temp2)){
set.add(temp2);
queue.add(temp2);
}
}
list.remove(i);
}
}
}
System.out.println(set.size());
}
}
8.28 笔试题第三题
昨天笔试时傻逼了,虽然是求解最长公共子序列问题,但题目的意思是删除后剩下的是公共子序列,问的是删除元素的个数。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int[] num1=new int[n];
int[] num2=new int[n];
for (int i=0;i<n;i++){
num1[i]=sc.nextInt();
}
for (int i=0;i<n;i++){
num2[i]=sc.nextInt();
}
int result=findLongest(num1,num2,n);
System.out.println(n-result);
}
}
public static int findLongest(int[] num1,int[] num2,int n){
int[][] dp=new int[n+1][n+1];
for (int i = 0; i <=n ; i++) {
for (int j = 0; j <=n ; j++) {
dp[i][j]=0;
}
}
for (int i = 1; i <=n ; i++) {
for (int j = 1; j <=n ; j++) {
if(num1[i-1]==num2[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}else{
dp[i][j]=dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1];//比较左边跟上边
}
}
}
return dp[n][n];
}
}