题目描述 bessie是他大学里最粗心的编程人员之一。 他永远不知道该打字什么,他依靠他的朋友告诉他什么时候他错了。 以下是他如何在计算机中键入命令的字母: 他输入字母'a'并看着他的朋友。如果这是正确的字母,朋友点头,克里姆继续输入下一个字母。 如果朋友摇了摇头,意味着'a'不是正确的字母,bessie按退格键去掉'a',然后他输入'b'。然后,他再次看着他的朋友。 如果'b'也不正确,他会按退格键擦除它并键入'c'。等等,通过整个字母表。 给出一段小写字母构成的文本,确定bessie在键入此文本时将执行的击键次数。字母和退格都算作击键。 输入格式 一个字符串,长度不超过50,全部由小写字母构成。 输出格式 一个整数,最少的击键次数。 输入/输出例子1 输入: bad 输出: 11 根据上方描述,写出程序
时间: 2024-02-22 14:57:07 浏览: 161
以下是 C++ 语言的程序:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[51];
cin >> s;
int len = strlen(s);
int ans = len; // 初始化击键次数为字符串长度
for (char c = 'a'; c <= 'z'; c++) { // 枚举每个字母
int cnt = 0; // 当前字母下的击键次数
bool flag = true; // 标记当前字母是否为正确字母
for (int i = 0; i < len; i++) {
if (s[i] == c && flag) { // 如果当前字母正确
cnt++; // 点击次数加一
} else {
cnt += 2; // 退格键加字母键的总计击键次数
flag = false; // 标记当前字母不是正确字母
}
}
ans = min(ans, cnt); // 取最小击键次数
}
cout << ans << endl;
return 0;
}
```
程序的思路是,枚举每个字母作为正确字母,计算在这个字母下的击键次数,取最小值即为最少的击键次数。在计算击键次数时,如果当前字母是正确字母,则点击次数加一;否则,点击次数加上退格键和字母键的总计击键次数。
阅读全文