P1765 手机

1.题目介绍

手机

题目描述

一般的手机的键盘是这样的:

要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x0 键按一下会出一个空格。

你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。

输入格式

一行句子,只包含英文小写字母和空格,且不超过 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;
}
posted @   DawnTraveler  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示