P1765 手机
1.题目介绍
手机
题目描述
一般的手机的键盘是这样的:
要按出英文字母就必须要按数字键多下。例如要按出
你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。
输入格式
一行句子,只包含英文小写字母和空格,且不超过 200 个字符。
输出格式
一行一个整数,表示按键盘的总次数。
样例 #1
样例输入 #1
i have a dream
样例输出 #1
23
提示
NOI 导刊 2010 普及(10)
2.题解
2.1 switch case
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str;
getline(cin, str);
int count = 0;
for(char ch:str){
switch(ch){
case 'a':
case 'd':
case 'g':
case 'j':
case 'm':
case 'p':
case 't':
case 'w':
case ' ':{
count++;
break;
}
case 'b':
case 'e':
case 'h':
case 'k':
case 'n':
case 'q':
case 'u':
case 'x':{
count += 2;
break;
}
case 'c':
case 'f':
case 'i':
case 'l':
case 'o':
case 'r':
case 'v':
case 'y':{
count += 3;
break;
}
case 's':
case 'z':{
count += 4;
break;
}
}
}
cout << count;
}
2.2 打表
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
string str;
getline(cin, str);
unordered_map<char, int> charValues = {
{'a', 1}, {'b', 2}, {'c', 3},
{'d', 1}, {'e', 2}, {'f', 3},
{'g', 1}, {'h', 2}, {'i', 3},
{'j', 1}, {'k', 2}, {'l', 3},
{'m', 1}, {'n', 2}, {'o', 3},
{'p', 1}, {'q', 2}, {'r', 3},
{'s', 4}, {'t', 1}, {'u', 2},
{'v', 3}, {'w', 1}, {'x', 2},
{'y', 3}, {'z', 4}, {' ', 1}
};
int count = 0;
for (char ch : str) {
count += charValues[ch];
}
cout << count;
return 0;
}
2.3 自动打表
代码
#include <iostream>
#include <string>
using namespace std;
int clicks[256] = { 0 };
void init_clicks()
{
const string keyboard[12] = {
"", "abc", "def",
"ghi", "jkl", "mno",
"pqrs", "tuv", "wxyz",
"*", " ", "#"};
for (int i = 0; i < 12; ++i)
for (int j = 0; j < keyboard[i].length(); ++j)
clicks[keyboard[i][j]] = j + 1;
}
int main()
{
init_clicks();
string s;
getline(cin, s);
int count = 0;
for (int i = 0; i < s.length(); ++i)
count += clicks[s[i]];
cout << count;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了