首页 > 代码库 > 1006 Do the Untwist
1006 Do the Untwist
考察编程基础知识,用到字符和数字相互转化等。形式是描述清楚明文和暗文的转化规则。
1 #include <stdio.h> 2 #include <string.h> 3 4 #define MAXLEN 71 5 6 int length; 7 8 void toCode(int code[],char text[]){ 9 int i;10 for(i=0;i<length;i++){11 if(text[i] == ‘_‘)12 code[i] = 0;13 else if(text[i] == ‘.‘)14 code[i] = 27;15 else16 code[i] = text[i] - 96;17 }18 }19 20 void toText(char text[],int code[]){21 int i;22 for(i=0;i<length;i++){23 if(code[i] == 0)24 text[i] = ‘_‘;25 else if(code[i] == 27)26 text[i] = ‘.‘;27 else28 text[i] = code[i] + 96;29 }30 text[i] = 0;31 }32 33 int inRange(int n){34 if(n>=0&&n<=27)35 return 1;36 return 0;37 }38 39 void untwist(char textC[],int k){40 int i,j;41 int codeC[MAXLEN],codeP[MAXLEN];42 char textP[MAXLEN];43 44 toCode(codeC,textC);45 for(i=0;i<length;i++){46 j = (k*i)%length;47 if(inRange(codeC[i] + i)) 48 codeP[j] = codeC[i] + i;49 else if(inRange(codeC[i] + i - 28)) 50 codeP[j] = codeC[i] + i - 28;51 else if(inRange(codeC[i] + i - 56)) 52 codeP[j] = codeC[i] + i - 56;53 else if(inRange(codeC[i] + i - 84)) 54 codeP[j] = codeC[i] + i - 84;55 }56 toText(textP,codeP);57 printf("%s\n",textP);58 }59 60 int main(){61 int k;62 char textC[MAXLEN];63 while(scanf("%d",&k)&&k){64 scanf("%s",textC);65 length = strlen(textC);66 untwist(textC,k);67 }68 return 0;69 }
1006 Do the Untwist
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。