【字符串】【乱搞】【AOJ-606】LOL系列之德玛短路
Description
德玛的经典台词:人在塔在。由于最近LOL增加了草丛数量(草丛伦怎能不开心?!)由于太过于兴奋,盖伦突然变成白痴了- -,连最经典的台词都变为:人在塔亡(变身剑圣?),德玛现在的症状是:如果该单词在句子中的序号为素数的话,他就会把这个单词反过来说(abcd -> dcba),为了治疗盖伦,你得和盖伦交流,寻求找到治疗他的方法。德玛说话完全变反了,现在你的任务是将盖伦的话翻译回他本来的意思,比如德玛说:i evil dna tower tsixe其实他的本意是i live and tower exist(因为2,3,5是素数,所以这些位置上的单词反过来了)
注意:1不是素数,而且可能会有许多多余的空格!
注意:1不是素数,而且可能会有许多多余的空格!
Input
输入包括多组测试数据,以文件(EOF)结束
每行一个字符串,由小写字母和空格组成(最多不会超过500个单词,字符串总长度不超过10^5)
每行一个字符串,由小写字母和空格组成(最多不会超过500个单词,字符串总长度不超过10^5)
Output
输出每个字符串对应的原意
Sample Input
i evil dna tower tsixe
Sample Output
i live and tower exist
思路:
设置一个num来判断达到第几个单词 如果是素数 则反转输出
参考代码:
#include <stdio.h>
#include <string.h>
int is_prime(int n) //判断是否为素数
{
if(n==1||n==4)
return 0;
if(n==2||n==3)
return 1;
int i;
for(i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
void turn(char *a,int i,int len) //字符串倒序输出
{
int j;
for(j=0;j<len;j++)
printf("%c",a[i-1-j]);
}
int main()
{
char c[100001]={0};
int flag=1;
while(gets(c)!=NULL)
{
int i=0,j;
int num=1,len=0;//num代表第几个单词 len代表当前单词长度
for(i=0;c[i]!='\0';i++)
{
if(c[i]==' ')
{
if(flag)//判断是否是第一个空格 如果不是第一个空格不执行直接输出空格
{
if(is_prime(num))
{
turn(c,i,len);
len=0;
num++;
}
else
{
for(j=0;j<len;j++)
printf("%c",c[i-len+j]);
len=0;
num++;
}
flag=0;
}
else
{
printf(" ");
continue;
}
printf(" ");
}
else
{
flag=1;
len++;
}
}
//读到最后时 有\0可能不处理 跳出循环后再处理最后一个单词
if(is_prime(num))
turn(c,i,len);
else
for(j=0;j<len;j++)
printf("%c",c[i-len+j]);
printf("\n");
}
return 0;
}
浙公网安备 33010602011771号