POJ_1107_WsCipher
2015-07-20 15:23
302 查看
题目为简单的模拟。读题比较麻烦其中旋转(rotated)这个表述我认为并不好。这样很难明白当k值大于部分串长度时的处理方式。
#include <iostream> #include <stdio.h> using namespace std; char s[100]; char ss[100]; int s1[100],s2[100],s3[100]; void fu(int str[],int f,int k) { int p=0; for(int i=f-k%f;i<f;i++) //这里这个k%f是题目的一个坑 { ss[str[p]]=s[str[i]]; p++; } for(int i=0;i<f-k%f;i++) { ss[str[p]]=s[str[i]]; p++; } } int main() { int k1,k2,k3; int f1,f2,f3; //保存三个数组中的位置 int l;//字符串长度 scanf("%d%d%d",&k1,&k2,&k3); while(k1!=0&&k2!=0&&k3!=0) { f1=f2=f3=l=0; scanf("%s",s); for(int i=0;s[i]!=0;i++) { if('a'<=s[i]&&s[i]<='i') { s1[f1]=i; f1++; } else if('j'<=s[i]&&s[i]<='r') { s2[f2]=i; f2++; } else { s3[f3]=i; f3++; } l++; } //此时f1,f2,f3 中有s1,s2,s3的长度信息 //加入的测试cout<<f1<<" "<<f2<<" "<<f3<<" "<<l<<endl;
if(f1) fu(s1,f1,k1); if(f2) fu(s2,f2,k2); if(f3) fu(s3,f3,k3); ss[l]=0; printf("%s\n",ss); scanf("%d%d%d",&k1,&k2,&k3); } return 0; }
相关文章推荐
- python进阶四:类的继承
- Ajax-表单传值
- JQuery事件e参数的方法preventDefault()取消默认行为
- Sort and Shuffle 排序和打乱
- Fly-By Topology
- keySet 与entrySet 遍历HashMap性能差别
- http://sass-lang.com/documentation/Sass/Script/Functions.html
- GTK中如何捕捉和屏蔽按键信号(如F10等)
- 光标
- 可穿戴设备(CC2541)上微信(8)
- 【W3s学JSON】JSON入门概念学习笔记 _W3school
- Windows Azure Virtual Machine (24) Azure VM支持多网卡功能
- Decorator Pattern
- 解决Ubuntu Server 12.04换了网卡MAC地址后 网络不可用的问题.
- Swift 学习之二十一:?和 !(详解)
- c#怎样将object转换过程int型
- Is memcached a dinosaur in comparison to Redis?
- Java通过JNI调用C++
- 每天一个linux命令(37):date命令
- SQL Server中的高可用性---概念