浙大ACM 1006 WA 求助
#include<stdio.h>c++
#include<string.h>
#define MAX 70
int main(void){
int k;
char ciphertext[MAX];
while(scanf("%d",&k)&&k!=0){
//输入
getchar();
gets(ciphertext);
int n=strlen(ciphertext);
int ciphercode[n];
int plaincode[n];
//得到密文数组
for(int i=0;i<n;i++){
if(ciphertext[i]=='_')
ciphercode[i]=0;
else if(ciphertext[i]=='.')
ciphercode[i]=27;
else ciphercode[i]=ciphertext[i]-96;
}
//得到原文代码数组
for(int i=0;i<n;i++){
int a=0;
while(a<=27){
if(ciphercode[i]==(a-i)%28||ciphercode[i]==(a-i+28)%28)
{
int x=k*i;
x=x%n;
plaincode[x]=a;
break;
}
a++;
}
}
//test
//for(int i=0;i<n;i++)
//printf("%d\n",plaincode[i]);
//test
for(int i=0;i<n;i++){
char c;
if(plaincode[i]==0)
c='_';
else if(plaincode[i]==27)
c='.';
else c=plaincode[i]+96;
putchar(c);
}
putchar('\n');
}
}
#include<stdio.h>
#include<string.h>
//改 #define MAX 70
#define MAX 71
int main(void){
int k;
char ciphertext[MAX];
while(scanf("%d",&k)&&k!=0){
//输入
getchar();
gets(ciphertext);
int n=strlen(ciphertext);
int ciphercode[MAX];//改 int ciphercode[n];
int plaincode[MAX];//改 int plaincode[n];
//得到密文数组
for(int i=0;i<n;i++){
if(ciphertext[i]=='_')
ciphercode[i]=0;
else if(ciphertext[i]=='.')
ciphercode[i]=27;
else ciphercode[i]=ciphertext[i]-96;
}
//得到原文代码数组
for(int i=0;i<n;i++){
/*改
int a=0;
while(a<=27){
if(ciphercode[i]==(a-i)%28
[解决办法]
ciphercode[i]==(a-i+28)%28)
{
int x=k*i;
x=x%n;
plaincode[x]=a;
break;
}
a++;
}*/
plaincode[k*i%n] = (ciphercode[i]+i)%28;
}
//test
//for(int i=0;i<n;i++)
//printf("%d\n",plaincode[i]);
//test
for(int i=0;i<n;i++){
char c;
if(plaincode[i]==0)
c='_';
else if(plaincode[i]==27)
c='.';
else c=plaincode[i]+96;
putchar(c);
}
putchar('\n');
}
}