P1603 斯诺登的密码

P1603 斯诺登的密码
在这里插入图片描述

1、用map存储
2、全排列
3、数字过于大,用int 会爆掉 需要用long

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class _1603 {
	static ArrayList<Integer> e= new ArrayList<>();
	static int index = 0; 
	static long min = Long.MAX_VALUE;
	public static void main(String[] args) throws IOException {
		Map<String, Integer> m = new HashMap<>();
		m.put("one", 1);
		m.put("two", 2);
		m.put("three", 3);
		m.put("four", 4);
		m.put("five", 5);
		m.put("six", 6);
		m.put("seven", 7);
		m.put("eight", 8);
		m.put("nine", 9);
		m.put("ten", 10);
		m.put("eleven", 11);
		m.put("twelve", 12);
		m.put("thirteen", 13);
		m.put("fourteen", 14);
		m.put("fifteen", 15);
		m.put("sixteen", 16);
		m.put("seventeen", 17);
		m.put("eighteen", 18);
		m.put("nineteen", 19);
		m.put("twenty", 20);
		m.put("a", 1);
		m.put("both", 2);
		m.put("another", 1);
		m.put("first", 1);
		m.put("second", 2);
		m.put("third", 3);
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s = br.readLine();
		String s1[]= s.split(" ");
		String a[] = new String[100000];
		index = 0;
		for(int i=0;i<s1.length;i++) {
			if(m.get(s1[i])!=null) {
				int t = (m.get(s1[i])*m.get(s1[i]))%100;
				if(t<=9) {
					a[index] = "0"+String.valueOf(t); 
				}else {
					a[index] = String.valueOf(t);
				}
				index++;
			}
		}
		if(a[0]==null) {
			System.out.println(0);
		}else {
		permutation(a, 0); 
		System.out.println(min);
		}
		}
	public static void permutation(String[] ks,int i){  

        if(ks==null||i<0 ||i>index){//1  

            return;  

        }

        if(i==index-1){//2
        	String s = "";
        	for(int k=0;k<index;k++) {
        		s = s+ks[k];
        	}
        	long min_s = Long.parseLong(s);
        	if(min>min_s) {
        		min = min_s;
        	}

        }else{  

            for(int j=i;j<index;j++){//3  

                String temp=ks[j];//交换前缀,使之产生下一个前缀  

                ks[j]=ks[i];  

                ks[i]=temp;  

                permutation(ks,i+1);//4  

                temp=ks[j]; //将前缀换回来,继续做上一个的前缀排列.//5  

                ks[j]=ks[i];  

                ks[i]=temp;  

            }   

        }  

    }  
 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值