poj 1107 (jobdu 1485) W's Cipher AC代码
2014-02-22 11:09
316 查看
题目链接:http://bailian.openjudge.cn/practice/1107
题目链接:http://ac.jobdu.com/problem.php?pid=1485
这道题其实不难,但做了很久,一开始题没看清,题目要求三组分别移位,一开始全局移位了。 当然还需注意的就是字符位置和值得变化,先保存每个字符的位置,然后改变值而不改变位置,最后将改变后的值映射回原来的位置。详细看代码。
题目链接:http://ac.jobdu.com/problem.php?pid=1485
这道题其实不难,但做了很久,一开始题没看清,题目要求三组分别移位,一开始全局移位了。 当然还需注意的就是字符位置和值得变化,先保存每个字符的位置,然后改变值而不改变位置,最后将改变后的值映射回原来的位置。详细看代码。
#include <stdio.h> #include <math.h> #include <string.h> typedef struct{ char data; int loc; }node; int main(){ char str[80]; node str1[80]; node str2[80]; node str3[80]; int k1,k2,k3; int num; int n1,n2,n3; while(scanf("%d%d%d",&k1,&k2,&k3)!=EOF && k1!=0 && k2!=0 && k3!=0){ scanf("%s", str); num=strlen(str); n1=n2=n3=0; // 分类 for(int j=0;j<num;j++){ if(('a'<= str[j])&&(str[j] <= 'i')){ str1[n1].data=str[j]; str1[n1].loc=j; n1++; }else if(('j'<= str[j])&&(str[j] <= 'r')){ str2[n2].data=str[j]; str2[n2].loc=j; n2++; }else{ str3[n3].data=str[j]; str3[n3].loc=j; n3++; } } // 译码 for(int j=0;j<n1;j++){ str[str1[(j+k1)%n1].loc]=str1[j].data; } for(int j=0;j<n2;j++){ str[str2[(j+k2)%n2].loc]=str2[j].data; } for(int j=0;j<n3;j++){ str[str3[(j+k3)%n3].loc]=str3[j].data; } //输出 str[num]='\0'; printf("%s\n", str); } return 0; }
相关文章推荐
- POJ_1107_WsCipher
- POJ 1107 W's Cipher
- POJ1107
- POJ - 1107 W&#39;s Cipher
- poj 1485 dp
- POJ 1107:W's Cipher(模拟)
- poj 1326 (jobdu 1484)输入问题
- 文章标题poj 1107:W's Cipher (模拟)
- 快餐店之间插入仓库,路最短,DP,POJ(1485)
- poj 1160&1485
- POJ_1107_W's Cipher
- poj 1485 Fast Food dp
- POJ 1107 选定字符循环右移
- HUD 1227 && POJ 1485 && ZOJ 1196
- poj 1485 Fast Food(区间dp)
- poj1107 W's Cipher(字符串)
- POJ1485 Sumdiv
- POJ 1107 W's Cipher 解密
- poj 1107 --W's Cipher
- POJ 1107 : W\'s Cipher - 密码,字符串模拟