zoj1006
2012-03-04 09:25
225 查看
题目中给出的是已知明码求密码的公式,要求编已知密码求明码的算法。字符转换成数字就不多说了,关键是那个公式。首先需要考虑每个密码字符所对应的明码字符以及所处的位置。注意,尽管公式中有mod28,但是逆求回去的话数字不可能大于27.然后再求位置就可以了。
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> int k,N; char plain[71]; char ciph[71]; int p_num[71]; int c_num[71]; int main() { int i; scanf("%d",&k); while(k!=0) { scanf(" "); scanf("%s",ciph); N=strlen(ciph); for(i=0;i<N;i++) { if(ciph[i]=='.') { c_num[i]=27; } else if(ciph[i]=='_') { c_num[i]=0; } else { c_num[i]=ciph[i]-'a'+1; } } for(i=0;i<N;i++) { while(i+c_num[i]>27) { c_num[i]=c_num[i]-28; } p_num[(k*i)%N]=c_num[i]+i; } for(i=0;i<N;i++) { if(p_num[i]==0) { plain[i]='_'; } else if(p_num[i]==27) { plain[i]='.'; } else { plain[i]='a'-1+p_num[i]; } printf("%c",plain[i]); } printf("\n"); scanf("%d",&k); } return 0; }
相关文章推荐
- 题目1006:ZOJ问题
- zoj 1006
- 题目1006:ZOJ问题
- ZOJ-1006-Do the Untwist
- 九度OJ 1006:ZOJ问题 (递归)
- zoj 1006
- 九度1006:ZOJ问题
- 1006 zoj
- 九度 题目1006:ZOJ问题
- 题目1006:ZOJ问题
- 题目1006:ZOJ问题(递推规律)
- 题目1006:ZOJ问题
- ZOJ-1006
- 题目1006:ZOJ问题
- ZOJ Problem Set - 1006
- [ZOJ 1006] Do the Untwist (模拟实现解密)
- 九度OJ 1006 ZOJ问题 (这题测试数据有问题)
- [Jobdu OJ] 1006 ZOJ问题
- ZOJ1006 Do the Untwist
- 九度OJ 1006 ZOJ问题