Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
AC的代码,与喜欢java的朋友一起切磋!/******************************************************************* *AC的代码,与喜欢java的朋友一起切磋! *开始的时候RE了,我想不通是什么原因:不可能是越界,也不可能是IOException。 *后来judge说可能是nullPointerException,但我还是觉得不可能, *于是继续研究题目原文,忽然发现:如果密文中没有a,会怎么办? *RE的原因:除数为0! ********************************************************************/ import java.io.*; import java.util.*; public class Main { public static void main(String[] args)throws Exception { char [] kc1=new char[85]; int [] ka1=new int[85]; char [] kc2=new char[85]; int [] ka2=new int[85]; char [] kc3=new char[85]; int [] ka3=new int[85]; int k1,k2,k3; int num1,num2,num3; int i,j; BufferedReader cin=new BufferedReader(new InputStreamReader(System.in)); String strnum; StringTokenizer strtok; //Read in the k1,k2,k3; strnum=cin.readLine(); strtok=new StringTokenizer(strnum); k1=Integer.parseInt(strtok.nextToken()); k2=Integer.parseInt(strtok.nextToken()); k3=Integer.parseInt(strtok.nextToken()); while(!(k1==0&&k2==0&&k3==0)){ //Read in the encryption String str=cin.readLine(); int size=str.length(); num1=num2=num3=0; char ct; int at; //Analyse the encryption string for(i=0;i<size;++i) { ct=str.charAt(i); if(ct=='_')at=2; else at=(ct-'a')/9; switch(at){ case 0:ka1[num1]=i;kc1[num1]=ct;num1++;break; case 1:ka2[num2]=i;kc2[num2]=ct;num2++;break; case 2:ka3[num3]=i;kc3[num3]=ct;num3++;break; } } //Rotation /********************************************************** *RE就在这里!! *Maybe there is no letter among the group 1, then num1=0 **********************************************************/ if(num1!=0)k1=k1%num1; if(num2!=0)k2=k2%num2; if(num3!=0)k3=k3%num3; if(k1!=0&&num1!=0){ char [] okc1=new char[num1]; System.arraycopy(kc1,0,okc1,0,num1); for(i=0;i<num1;++i){ j=i+k1; if(j>=num1)j-=num1; kc1[j]=okc1[i]; } } if(k2!=0&&num2!=0){ char [] okc2=new char[num2]; System.arraycopy(kc2,0,okc2,0,num2); for(i=0;i<num2;++i){ j=i+k2; if(j>=num2)j-=num2; kc2[j]=okc2[i]; } } if(k3!=0&&num3!=0){ char [] okc3=new char[num3]; System.arraycopy(kc3,0,okc3,0,num3); for(i=0;i<num3;++i){ j=i+k3; if(j>=num3)j-=num3; kc3[j]=okc3[i]; } } //Decryption string char[] sstr=new char[size]; for(i=0;i<num1;++i) sstr[ka1[i]]=kc1[i]; for(i=0;i<num2;++i) sstr[ka2[i]]=kc2[i]; for(i=0;i<num3;++i) sstr[ka3[i]]=kc3[i]; //Output the decryption string System.out.println(sstr); //Handle the new case strnum=cin.readLine(); strtok=new StringTokenizer(strnum); k1=Integer.parseInt(strtok.nextToken()); k2=Integer.parseInt(strtok.nextToken()); k3=Integer.parseInt(strtok.nextToken()); } } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator