一、题目描述

英语老师有无数张单词卡,每张卡片上有一个小写英文单词。现在将卡片打乱,然后依次排成一串:

如:AEEECCFFFCD

每三张连续相同的卡片可以消除,

上述案例最后可以消除成:AD

如果一串可以完全消除成功,则输出0;

如果一串无法完全消除,则输出其消除完所有可消除的单词卡后,剩下的有序串。

二、思路

首先要有一个判断函数,

这个函数的功能是判断所给字符串能否进行消除。如果能,则返回消除的那三个字母的前一个字母的下标;如果不能,则返回-1。

还需要一个判断长度函数。

然后在主函数中进行循环判断。

每一次若可消除,则使用字符串切割函数,截取头与尾,切割掉可消除的三个连续字母,

再使用字符串拼接,将原串变成切割后的子串。

重复上述步骤,直到无法再进行消除。

退出循环后,查看剩余字符串的长度:

如果为0,则说明消除成功;

如果不为0,则说明消除不彻底,输出即可。

三、代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <iostream>
#include <vector>
#include <string>using namespace std;int getLength(string s)
{int length = 0;string::iterator it = s.begin();while (it != s.end()){it++;length++;}return length;
}//临时串的判定
bool judgeRest(string ret)
{int length = getLength(ret);if (length >= 3){//仅有倒数三个值相同,才是可消除的。唯一true出口if (ret[length - 1] == ret[length - 2] && ret[length - 2] == ret[length - 3]){return true;}else{return false;}}else{return false;}
}//主串的判定
int judgeString(string s)
{string ret;int length = getLength(s);//当前元素的下标int location = 0;bool flag = false;for (int i = 0; i < length; i++){flag = false;ret += s[i];location++;if (judgeRest(ret)){flag = true;break;}}if (flag == true){//返回切割起点return location - 3;}else{return -1;}
}int main()
{string a;cin >> a;while (judgeString(a) != -1){int length = getLength(a);int location = judgeString(a);string front = a.substr(0, location);string back = a.substr(location + 3);a = front + back;}if (getLength(a) == 0){cout << '0';}else{cout << a;}return 0;
}

运行截图:

算法 字符串【英语老师的单词卡消除】相关推荐

  1. C语言字符串中最后一个单词的长度的算法(附完整源码)

    C语言字符串中最后一个单词的长度的算法 C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) ...

  2. 【making tools】:算英语文章中单词个数,给英语老师使用

    这个程序实现的功能非常之简单,就是查找文件里面有多少个单词. 思路如下:按行读取,然后利用空格 + 英文字母的方法定义每一个单词,大致利用这种思路,就能统计出文件里面有多少个单词,但是这里出了一个问题 ...

  3. 如何检查字符串是否包含特定单词?

    考虑: $a = 'How are you?';if ($a contains 'are')echo 'true'; 假设我有上面的代码, if ($a contains 'are') ,写语句的正确 ...

  4. ##英语文本的单词统计 排序并输出前5%

    ## 英语文本的单词统计 排序并输出前5% /*统计英语文本英语个数及150%***************************************************** *//* /* ...

  5. 小学英语教学c语言,小学英语老师常用的课堂操练游戏100例

    原标题:小学英语老师常用的课堂操练游戏100例 如果您是一位热心于辅导孩子学习英语的家长,下边有些游戏也不妨用一用,不是仅限于教室哦~ 1.模仿秀 imitate show 游戏说明:教师带领学生一起 ...

  6. 程序设计与算法郭炜老师的课堂笔记1

    程序设计与算法郭炜老师的课堂笔记1 基础 与或非 位运算 字符串操作库函数 strtok尝试 字符串0新认识 void 指针无定义 快排 变量 排序 Vector vector示例 用**vector ...

  7. 9.9能买什么?80节北美外教AI课+158张单词卡+6张卡通贴纸+1张字母表+Leo单肩小书包........

    (80节课程有效期7天) 1 说好的优惠,最后都是套路 孩子3岁以后,最头疼的就是宝妈们了:孩子要学英语么,英语怎么科学启蒙?要不要找外教?孩子太小听不懂怎么办? 市面上五花八门的英语启蒙课程,宝妈们 ...

  8. 初中英语多词性单词怎么办_高考英语阅读理解生僻单词太多怎么办?十大招数帮到你...

    英语阅读理解生僻单词太多怎么办?今天,胡老师告诉你猜词十大招数,帮助同学们英语考试拿高分.  01  构词法 阅读中常常会遇到一些由熟悉的单词派生或合成的新词.掌握构词法对猜测词义很有帮助.如:unf ...

  9. 【作业】随机数+参数可变的方法+实验任务(输出素数+使用递归,判断是否为回文+统计一篇英语问斩单词出现频率)...

    (1)随机数 取余的m很大可以保证随机的更彻底,更不容易重复 1 import java.util.Scanner; 2 public class Text_001 3 { 4 5 public st ...

最新文章

  1. 网页静态化技术Freemarker
  2. 测试MindMotion 的 ISP功能 - 无法进入ISP功能
  3. 搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
  4. asp.net url 重写解决方案
  5. Linker Scripts3--简单的链接脚本命令2-Assigning Values to Symbols
  6. 2012年初的10个绝对让你惊喜的jQuery插件
  7. 《防患未然:实施情报先导的信息安全方法与实践》——2.8 小结
  8. JavaScript实现快速排序
  9. 火焰传感器感应有火亮灯代码_智能无线感应灯火了,光感人感2种传感器感应,做照明品牌的几光...
  10. 基于最大最小距离的分类数目上限K确定的聚类方法
  11. ASP.NET 2.0中实现跨页面提交
  12. Ubuntu中使用VS Code
  13. 【UVA10603】Fill(优先队列+状态转移)
  14. 有什么软件可以快速测试到苹果,苹果官方App测试工具TestFlight
  15. 微软操作系统 Windows Server 2012 R2 官方原版镜像
  16. C盘pc的Android文件夹,清理系统盘C盘的无用文件
  17. Using the Hardware Scaler for Performance and Efficiency
  18. 64位服务器采购全攻略
  19. re python 引擎_转 python内置正则表达式(re)模块官方文档简要中文版
  20. 计算机视觉要掌握哪些知识,学习了哪些知识,计算机视觉才算入门?

热门文章

  1. matlab 绘制一个可爱的胖娃娃
  2. 华为荣耀鸿蒙出自,华为鸿蒙并没有忘记荣耀,荣耀在前三批之列,网友:毕竟是一家人!...
  3. 添加光效——颜色减淡法
  4. 网络管理怎么配置路由
  5. 英伟达“核弹”再次来袭?Web3.0最高8万招聘,周星驰也来了/文本生成图像引“掐架”……...
  6. 数字图像处理Python语言实现-图像增强-各向异性扩散滤波
  7. 还在用单脚助力?你该换一副悬浮滑板了
  8. 北宋君臣关系及前期政治
  9. 龙珠觉醒手游怎么用电脑玩 龙珠觉醒安卓模拟器教程
  10. Cadence_焊盘Pad制作1_表贴焊盘制作