热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【基础训练查表+map】SMSTyping

Inthisproblemwewillassumethatthekeypadofourcellphoneisarrangedasfollows.Intheabovegrideach

In this problem we will assume that the key pad of our cell phone is arranged as follows.


  In the above grid each cell represents one key. Here means a space. In order to type the letter‘a’, we must press that key once, however to type ‘b’ the same key must be repeatedly pressed twiceand for ‘c’ three times. In the same manner, one key press for ‘d’, two for ‘e’ and three for ‘f’. This isalso applicable for the remaining keys and letters. Note that it takes a single press to type a space.

Input

The first line of input will be a positive integer T where T denotes the number of test cases. T lineswill then follow each containing only spaces and lower case letters. Each line will contain at least 1 andat most 100 characters.

Output

For every case of input there will be one line of output. It will first contain the case number followedby the number of key presses required to type the message of that case. Look at the sample output forexact formatting.

Sample Input

2

welcome to ulab

good luck and have fun

Sample Output

Case #1: 29

Case #2: 41


问题链接:UVA11530 SMS Typing

问题简述:(略)

问题分析:(略)

程序说明:

  这个问题直接模拟实现。

  功能手机键盘的各个字母按键次数是固定,使用map来存储各个字符的按键次数是一种比较简单的做法。

  然而用数组来存储各个字符的按键次数,效率更高。

题记:离散表通常用map来实现,连续的表则用数组来实现,效率很重要。

参考链接:(略)


AC的C语言程序如下:

[cpp] view plaincopy
  1. /* UVA11530 SMS Typing */  
  2.   
  3. #include   
  4. #include   
  5.   
  6. #define N 100  
  7. char s[N + 1];  
  8.   
  9. int m[] = {1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4};  
  10.   
  11. int main(void)  
  12. {  
  13.     int t, caseno=0, sum;  
  14.   
  15.     scanf("%d", &t);  
  16.     getchar();  
  17.     while(t--) {  
  18.         gets(s);  
  19.   
  20.         sum = 0;  
  21.         for(int i=0; s[i]; i++)  
  22.             if(islower(s[i]))  
  23.                 sum += m[s[i] - 'a'];  
  24.             else if(s[i] == ' ')  
  25.                 sum += 1;  
  26.   
  27.         printf("Case #%d: %d\n", ++caseno, sum);  
  28.     }  
  29.   
  30.     return 0;  
  31. }  




 

AC的C++语言程序如下:

[cpp] view plaincopy
  1. /* UVA11530 SMS Typing */  
  2.   
  3. #include   
  4. #include   
  5. #include   
  6.   
  7. using namespace std;  
  8.   
  9. const int N = 100;  
  10. char s[N + 1];  
  11.   
  12. map <charint> m;  
  13.   
  14. int main()  
  15. {  
  16.     int t, caseno&#61;0, sum;  
  17.   
  18.     m[&#39;a&#39;] &#61; m[&#39;d&#39;] &#61; m[&#39;g&#39;] &#61; m[&#39;j&#39;] &#61; m[&#39;m&#39;] &#61; m[&#39;p&#39;] &#61; m[&#39;t&#39;] &#61; m[&#39;w&#39;] &#61; m[&#39; &#39;] &#61; 1;  
  19.     m[&#39;b&#39;] &#61; m[&#39;e&#39;] &#61; m[&#39;h&#39;] &#61; m[&#39;k&#39;] &#61; m[&#39;n&#39;] &#61; m[&#39;q&#39;] &#61; m[&#39;u&#39;] &#61; m[&#39;x&#39;] &#61; 2;  
  20.     m[&#39;c&#39;] &#61; m[&#39;f&#39;] &#61; m[&#39;i&#39;] &#61; m[&#39;l&#39;] &#61; m[&#39;o&#39;] &#61; m[&#39;r&#39;] &#61; m[&#39;v&#39;] &#61; m[&#39;y&#39;] &#61; 3;  
  21.     m[&#39;s&#39;] &#61; m[&#39;z&#39;] &#61; 4;  
  22.   
  23.     scanf("%d", &t);  
  24.     getchar();  
  25.     while(t--) {  
  26.         gets(s);  
  27.   
  28.         sum &#61; 0;  
  29.         for(int i&#61;0; s[i]; i&#43;&#43;)  
  30.             sum &#43;&#61; m[s[i]];  
  31.   
  32.         printf("Case #%d: %d\n", &#43;&#43;caseno, sum);  
  33.     }  
  34.   
  35.     return 0;  
  1. }  




学到的点&#xff1a;
①借数组用查表法是应该熟稔于心的。
②map的定义和使用。


推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
author-avatar
a_2502881181
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有