六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 29|回复: 0

zoj 1006 do the untwist

[复制链接]

升级  29.33%

24

主题

24

主题

24

主题

秀才

Rank: 2

积分
94
 楼主| 发表于 2013-1-26 12:36:21 | 显示全部楼层 |阅读模式
题目见zoj 1006poj 1317 
简单的解密算法,直接套用题目中公式即可。
 
/* zoj 1006 Do the Untwist */#include <stdio.h>#include <string.h>#define MAXLEN 80#define MAGICNUM 28char num2Char(int n);int char2Num(char c);int main(void){  int key;  char ciphertext[MAXLEN],plaintext[MAXLEN];  int ciphercode[MAXLEN],plaincode[MAXLEN];  int slen,i;  while(scanf("%d", &key) == 1 && key != 0)    {      scanf("%s", ciphertext);      slen = strlen(ciphertext);      for(i = 0; i < slen; i++){  ciphercode = char2Num(ciphertext);  plaincode[(key * i) % slen] = (i+ciphercode)%MAGICNUM;}      for(i = 0; i < slen; i++)plaintext = num2Char(plaincode);      plaintext[slen] = '\0';      printf("%s\n",plaintext);    }  return 0;}int char2Num(char c){  if( c == '_')    return 0;  else if( c == '.')    return 27;  else    return c - 'a' + 1;}char num2Char(int n){  if(n == 0)    return '_';  else if(n == 27)    return '.';  else    return 'a' + n - 1;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表