AOJ-AHU-OJ-606 LOL系列之德玛短路

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不是素数,而且可能会有许多多余的空格!

 

Input
输入包括多组测试数据,以文件(EOF)结束
每行一个字符串,由小写字母和空格组成(最多不会超过500个单词,字符串总长度不超过10^5)

 

Output
输出每个字符串对应的原意

 

Sample Input
OriginalTransformed


i evil   dna tower tsixe

 

Sample Output
OriginalTransformed


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 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值