解密码(坐等大神)
Description
有一行英文密码,友军急切地想知道原文是什么,现知道加密的方法如下: (1)第一个字母的密文与原文相同; (2)从第二个字母开始,每一个字母的密文的ACSII码等于上一个字母的(密文的ACSII码-32)+(原文ACSII-32)的和再与96取模(即取余数)最后加上32 现由键盘给出一行密文(最多不超过10000个字母),要求输出原文。
Input
密文:W<(tXG5z&m\K/
原文:Welldone,good
附上我的代码,这个例子对了,可是提交系统还是错误,求大神帮我看看,不要自己写代码给我···我只想知道我自己哪里错了
#include<stdio.h>
#include<string.h>
void judge(char b[],int i)
{
char bitch;
int num = 0;
while(num<=2)
{
bitch = b[i]-b[i-1]+96*num+32;
if(bitch==','||('a'<=bitch&&bitch<='z')||('A'<=bitch&&bitch<='Z')||bitch=='.')
{
printf("%c",bitch);
break;
}
num++;
}
}
void main()
{ int i;
int length;
char a[10000];
gets(a);
length = strlen(a);
printf("%c",a[0]);
for(i=1 ;i<length; i++)
{
judge(a,i);
}
}
#include <string.h>
#include <stdio.h>
#define MAX(80)
int decrypt(const char* et)
{
int n = strlen(et);
int i;
char ch;
if(et == NULL)
return -1;
printf("%c", et[0]);
for(i = 1; i < n; i++)
{
for(ch = ' '; ch < 127; ch++)
{
if(et[i] == ((et[i - 1] - 32 + ch - 32) % 96 + 32))
{
printf("%c", ch);
break;
}
}
}
printf("\n");
return 0;
}
int main(int argc, char* argv[])
{
char et[MAX + 1];
fgets(et, MAX, stdin);
return decrypt(et);
}