大水题一个,但刚开始一直RE,后来发现算法不够优美,处理数据时发生了数组越界,可见数组在任何情况下都不能
越界:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
// printf("%d",(-1)%28);
int k;
char mapp[75];
for(int i=0;i<=27;i++)
{
if(i==0) mapp[i]='_';
else
if(i==27) mapp[i]='.';
else
mapp[i]='a'+i-1;
}
while(~scanf("%d",&k)&&k)
{
getchar();
int a[75],b[75];
char s[75];
gets(s);
int n=strlen(s);
for(int i=0;i<n;i++)
{
for(int j=0;j<=27;j++)
if(s[i]==mapp[j])
a[i]=j;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<=27;j++)
{
int temp=j-i;
while(temp<0||temp>27)
{
if(temp<0)
temp+=28;
else
temp-=28;
}
if(a[i]==temp)
b[k*i%n]=j;
}
}
for(int i=0;i<n;i++)
printf("%c",mapp[b[i]]);
printf("\n");
}
return 0;
}