首页 > 代码库 > NYOJ题目769乘数密码

NYOJ题目769乘数密码

技术分享

-----------------------------------------

这道题目是有一点小技巧的,因为取模运算没办法还原所以只好计算所有存储起来然后找映射,但是存储数据的使用场景是解密,再存储从明文到密文的映射就不太合适了,于是就存储从密文到明文的映射,这样子的话解密的时候就可以线性的从密文到明文。

AC代码:

 1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4  5 public class Main { 6  7     public static void main(String[] args) throws IOException { 8          9         BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));;10         11         boolean first=true;12         13         while(first || reader.ready()){14             first=false;15             16             String s=reader.readLine();17             String ss[]=s.split("\\s{1,}");18             initMapping(Integer.parseInt(ss[1]));19             System.out.println(encoding(ss[0]));20         }21     }22     23     private static int[] mapping=new int[26];24     25     public static void initMapping(int k){26         for(int i=0;i<mapping.length;i++){27             mapping[k*i%26]=i;28         }29     }30     31     public static char[] encoding(String s){32         char cs[]=s.toCharArray();33         for(int i=0;i<cs.length;i++){34             cs[i]=(char) (mapping[cs[i]-‘A‘]+‘A‘);35         }36         return cs;37     }38     39 }

 

题目来源: http://acm.nyist.net/JudgeOnline/problem.php?pid=769

NYOJ题目769乘数密码