鸡哥的奇特密码
问题描述
鸡哥是一个十分喜欢破解密码的密码学爱好者。在一次偶然的机会中,他发现了一份神秘的文档,文档上的密码只有字母 L 和 Q。经过仔细观察,鸡哥发现这不是一份普通的密码,它遵循着一个特殊的规则——任何两个相邻的 L 都会被解密成一个 L。鸡哥需要尽可能多地进行解密操作,直到无法再进行为止。
请你帮助鸡哥解密这份神秘的文档,找出经过尽可能多次解密操作后的密码。
输入格式
输入的第一行包含一个字符串 S,表示需要解密的密码。
字符串 S 的长度在 1 到 10000 之间,包含且只包含大写字母 L 或 Q。
输出格式
输出的第一行包含一个字符串,表示经过尽可能多次解密操作后的密码。
样例输入
LLLLQQQ
样例输出
LQQQ
模拟
#include<bits/stdc++.h> // 包含常用库的头文件,例如vector, algorithm等
using namespace std; // 使用标准命名空间
int main()
{
string s; // 定义一个字符串s用于存储输入的密码
cin>>s; // 从标准输入读取密码字符串s
int flag=0; // 定义一个标记变量flag来标识是否遇到字符L
// 遍历输入的字符串s中的每个字符
for(int i=0;i<s.size();i++)
{
// 如果当前字符是'L'并且flag为1(即之前的字符也是'L'),则跳过当前字符(即'L'被解密)
if(s[i]=='L'&&flag==1)
continue;
// 如果当前字符是'L'并且flag为0(即之前的字符不是'L'),则设置flag为1
if(s[i]=='L'&&flag==0)
flag=1;
// 如果当前字符是'Q'并且flag为1(即之前的字符是'L'),则重置flag为0
if(s[i]=='Q'&&flag==1)
flag=0;
// 输出当前字符,如果是连续的'L'则只输出第一个'L'
cout<<s[i];
}
return 0; // 程序正常结束
}
这段代码实现了鸡哥的奇特密码的解密过程,通过逐个检查输入字符串中的字符并根据规则确定是否输出字符。代码中使用了一个标志变量flag
来跟踪是否遇到了字符'L'
。如果遇到连续的'L'
字符,该程序将只输出第一个'L'
并跳过后续的'L'
字符,直到遇到一个'Q'
字符,此时重置flag
。这样,经过一遍扫描后,程序输出了解密后的密码。