zoukankan      html  css  js  c++  java
  • 【字符串】【乱搞】【AOJ-606】LOL系列之德玛短路

    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
    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]!='';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++; 
                } 
      
            } 
    		//读到最后时 有可能不处理 跳出循环后再处理最后一个单词
            if(is_prime(num)) 
                turn(c,i,len); 
            else
                for(j=0;j<len;j++) 
                    printf("%c",c[i-len+j]); 
            printf("
    "); 
        } 
        return 0; 
    }
    
     
  • 相关阅读:
    Django extra 和 annotate
    剑指offer——26反转链表
    剑指offer——25链表中环的入口节点
    剑指offer——24链表中倒数第k个结点
    剑指offer——23调整数组顺序使奇数位于偶数前面
    剑指offer——22表示数值的字符串
    剑指offer——21正则表达式匹配
    剑指offer——20删除链表中重复的结点
    剑指offer——19删除链表的节点
    剑指offer——18打印从1到最大的n位数
  • 原文地址:https://www.cnblogs.com/ahu-shu/p/3511735.html
Copyright © 2011-2022 走看看