【字符串】【乱搞】【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; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析