LOL系列之德玛短路
Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
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
Original | Transformed |
i evil dna tower tsixe
Sample Output
Original | Transformed |
i live and tower exist
Source
2013年6月月赛。 from victoira
——————————————————————分割线——————————————————————
思路:此题为判断素数。写一个函数,不是素数则返回1,是素数则返回0。判断方法:从i = 2开始,取余i直到i == sqrt(n),一旦能除尽则为合数。
之后对字符串按字符处理。空格直接输出。判断字符串中每个单词的序号,记录每个单词的开始、结束位置,做逆序处理。
代码如下:
1 #include<stdio.h>
2 #include<string.h>
3 int he(int f){
4 int a;
5 if (f == 1)
6 return 1;
7 for(a = 2; a * a <= f; a++){
8 if(f % a == 0)
9 return 1;
10 }
11 return 0;
12 }
13 int main(){
14 char str[100001];
15 int i, j;
16 int flag, end, word = 0;
17 while(gets(str) != NULL)
18 {
19 for(i = 0; str[i] != '\0'; i++){
20 if(str[i] == ' ')
21 putchar(' ');
22 else{
23 flag = i;
24 word++;
25 for(end = i;;end++){
26 if(str[end+1] == ' '||str[end+1] == '\0')
27 break;
28 }
29 if(he(word)){
30 for(j = flag; j <= end; j++)
31 printf("%c", str[j]);
32 i = end;
33 }
34 else{
35 for(j = end; j >= flag; j--)
36 printf("%c", str[j]);
37 i = end;
38 }
39 }
40 }
41 putchar('\n');
42 word = 0;
43 }
44 return 0;
45 }