题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6
一道水题,不过WA的次数不少啊!
首先这道题给的取余,其实是一种情况的,我傻傻的写了两种情况,当然,这不是wa的原因,原因主要是结果没有取余彻底将
if(p[i]>28)
p[i]%=28;
改为:
while(p[i]>28)
p[i]%=28;就AC了!
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int k,i;
char s[80],p[80];
while(1)
{
scanf("%d",&k);
if(k==0)
break;
getchar();
scanf("%s",s);
int len=strlen(s);
for(i=0; i<len; i++)
{
if(s[i]=='_')
s[i]=0;
else if(s[i]=='.')
s[i]=27;
else
s[i]=s[i]-'a'+1;
int t=s[i]-28;//第一种的
p[i]=s[i]+i;//其实都是一种情况的!
t+=i;
if(t>=0 && t<28)
p[i]=t;
while(p[i]>=28)
p[i]%=28;
// printf("%d ",p[i]);
}
// cout<<endl;
for(i=0; i<len; i++)
s[(k*i)%len]=p[i];
// for(i=0; i<len; i++)
// printf("%d ",s[i]);
for(i=0; i<len; i++)
if(s[i]==0)
printf("%c",'_');
else if(s[i]==27)
printf(".");
else
printf("%c",s[i]+'a'-1);
printf("\n");
}
return 0;
}