招商銀行信用卡中心21屆實習筆試編程題

第一題 鏡像字符串

給一個序列x,如果x和它的逆序列y的每一位都是鏡像關係,則輸出“yes”否則輸出“no”
1鏡像1,2鏡像5,3鏡像8,4鏡像7,6鏡像9。

輸入:

3
69
6996
1111

輸出

yes //69和96是
no   //6996和6996不是 因爲6必須對應9 
yes //1111和1111是 1和1對應

思路:就是用StringBuilder直接逆序,然後逐位比較即可…不知道爲什麼很多人沒a
一開始我只a了0.1,因爲StringBuilder反轉的時候不是生成新對象而是把原來的翻轉然後返回,後來idea調試發現了

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //獲取輸入的行數
        int n = scanner.nextInt();
        //解決輸入格式問題
        scanner.nextLine();
        //逐個處理
        for(int i=0;i<n;i++){
            String input = scanner.nextLine();
            //原字符串
            StringBuilder oriSB = new StringBuilder(input);
            //翻轉後字符串
            StringBuilder revSB = new StringBuilder(input).reverse();
            //定義boolean值表示是否鏡像 初始true
            boolean b=true;
            //逐位判斷 因爲要全部滿足 一個不滿足可跳出
            for(int j=0;j<oriSB.length();j++){
                char c1 = oriSB.charAt(j);
                char c2 = revSB.charAt(j);
                if(c1=='1'&&c2!='1'){//一個爲1,另一個必須爲1,下同
                    b=false;
                    break;
                }else if(c1=='2'&&c2!='5'){
                    b=false;
                    break;
                }else if(c1=='5'&&c2!='2'){
                    b=false;
                    break;
                }else if(c1=='3'&&c2!='8'){
                    b=false;
                    break;
                }else if(c1=='8'&&c2!='3'){
                    b=false;
                    break;
                }else if(c1=='4'&&c2!='7'){
                    b=false;
                    break;
                }else if(c1=='7'&&c2!='4'){
                    b=false;
                    break;
                }else if(c1=='6'&&c2!='9'){
                    b=false;
                    break;
                }else if(c1=='9'&&c2!='6'){
                    b=false;
                    break;
                }
            }
            if(b)
                System.out.println("YES");
            else
                System.out.println("NO");
        }
    }
}

也可以用HashMap

import java.util.HashMap;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //獲取輸入的行數
        int n = scanner.nextInt();
        //解決輸入格式問題
        scanner.nextLine();
        //逐個處理
        for(int i=0;i<n;i++){
            String input = scanner.nextLine();
            //原字符串
            StringBuilder oriSB = new StringBuilder(input);
            //翻轉後字符串
            StringBuilder revSB = new StringBuilder(input).reverse();
            //定義一個hashmap,存放值和對應的鏡像值
            HashMap<Character,Character> map=new HashMap<>();
            map.put('1','1');
            map.put('2','5');
            map.put('5','2');
            map.put('3','8');
            map.put('8','3');
            map.put('4','7');
            map.put('7','4');
            map.put('6','9');
            map.put('9','6');
            //定義boolean值表示是否鏡像 初始true
            boolean b=true;
            //逐位判斷 因爲要全部滿足 一個不滿足可跳出
            for(int j=0;j<oriSB.length();j++){
                char c1 = oriSB.charAt(j);
                char c2 = revSB.charAt(j);
                if(map.get(c1)!=c2){
                    b=false;
                    break;
                }
            }
            if(b)
                System.out.println("YES");
            else
                System.out.println("NO");
        }
    }
}

第二題 統計拆分字符串添加±號得到結果的個數

輸入:
2
21 1
12345 3
輸出
1 //2-1=1
1 //1-2+3-4+5=3

思路:動態規劃 從最後一位開始處理
例如123 15,會判斷12能否組成12(15-3)或18(15+3)(×),1和23能否組成15(×),123能否組成15(×)。
然後12能否組成12會判斷,1能否組成14(12+2)或10(12-2),12能否組成12(✔)。
建議草稿紙上畫一畫就明白了

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //獲取輸入的行數
        int n = scanner.nextInt();
        //解決輸入格式問題
        scanner.nextLine();
        //逐個處理
        for(int i=0;i<n;i++){
            String[] input = scanner.nextLine().split(" ");
            String str=input[0];//數字字符串
            int target=Integer.parseInt(input[1]);//目標數字
            System.out.println(solution(str,str.length()-1,str.length()-1,target));
        }
    }

    private static int solution(String str,int i,int j,int target){
        int result=0;
        for(int m=i;m<=j;m++){
            result=result*10+(str.charAt(m)-'0');
        }
        if(i==0){
            if(target==result)
                return 1;
            return 0;
        }
        int count=solution(str,i-1,i-1,target-result)+
                solution(str,i-1,i-1,target+result)+
                solution(str,i-1,j,target+result);
        return count;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章