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];
}
}