小米面试题:手机分身,电话号码隐藏。

小米面试题:
  手机分身,电话号码隐藏。
  0-9分别对应ZERO,ONE,TWO,...,NINE
  为保证手机拨号安全性,拨号后,存为对应的字符串,并打乱顺序,保证安全性。
  现在给定一个字符串,求最小的数字组合
例:
  TWOONE
  OTNWOE
  12
  12
分析:

关键字搜索:  第一次 第二次 第三次
0 ZERO Z    
1 ONE   O  
2 TWO W    
3 THREE   R  
4 FOUR U    
5 FIVE   F  
6 SIX X    
7 SENVE   S  
8 EIGHT G    
9 NINE     I/E

代码实现如下:

  1 #include "stdafx.h"
  2 #include<string>
  3 #include<iostream>
  4 using namespace std;
  5
  6 int main()
  7 {
  8     int zidian[26],number[10];
  9     memset(zidian,0,26*sizeof(int));
 10     memset(number,0,10*sizeof(int));
 11     string numberString;
 12     while(cin >> numberString)
 13     {//while循环,无限获取测试用例
 14         for (int i = 0; i < numberString.size(); i++)
 15         {//for循环建立字典索引,直接针对字典查,而不再单个搜索。
 16             char tempChar = numberString[i];
 17             zidian[(int)tempChar - 65] += 1;
 18         }
 19         int tempNum;
 20         //查找0 ZERO Z
 21         if(zidian[(int)‘Z‘ - 65] != 0)
 22         {
 23             tempNum = zidian[(int)‘Z‘ - 65];
 24             zidian[(int)‘Z‘ - 65] = 0;
 25             zidian[(int)‘E‘ - 65] -= tempNum;
 26             zidian[(int)‘R‘ - 65] -= tempNum;
 27             zidian[(int)‘O‘ - 65] -= tempNum;
 28             number[0] = tempNum;
 29         }
 30         //查找2 TWO W
 31         if(zidian[(int)‘W‘ - 65] != 0)
 32         {
 33             tempNum = zidian[(int)‘W‘ - 65];
 34             zidian[(int)‘W‘ - 65] = 0;
 35             zidian[(int)‘T‘ - 65] -= tempNum;
 36             zidian[(int)‘O‘ - 65] -= tempNum;
 37             number[2] = tempNum;
 38         }
 39         //查找4 FOUR U
 40         if(zidian[(int)‘U‘ - 65] != 0)
 41         {
 42             tempNum = zidian[(int)‘U‘ - 65];
 43             zidian[(int)‘U‘ - 65] = 0;
 44             zidian[(int)‘F‘ - 65] -= tempNum;
 45             zidian[(int)‘R‘ - 65] -= tempNum;
 46             zidian[(int)‘O‘ - 65] -= tempNum;
 47             number[4] = tempNum;
 48         }
 49         //查找6 SIX X
 50         if(zidian[(int)‘X‘ - 65] != 0)
 51         {
 52             tempNum = zidian[(int)‘X‘ - 65];
 53             zidian[(int)‘X‘ - 65] = 0;
 54             zidian[(int)‘S‘ - 65] -= tempNum;
 55             zidian[(int)‘I‘ - 65] -= tempNum;
 56             number[6] = tempNum;
 57         }
 58         //查找8 EIGHT G
 59         if(zidian[(int)‘G‘ - 65] != 0)
 60         {
 61             tempNum = zidian[(int)‘G‘ - 65];
 62             zidian[(int)‘G‘ - 65] = 0;
 63             zidian[(int)‘E‘ - 65] -= tempNum;
 64             zidian[(int)‘I‘ - 65] -= tempNum;
 65             zidian[(int)‘H‘ - 65] -= tempNum;
 66             zidian[(int)‘T‘ - 65] -= tempNum;
 67             number[8] = tempNum;
 68         }
 69         //查找1 ONE O
 70         if(zidian[(int)‘O‘ - 65] != 0)
 71         {
 72             tempNum = zidian[(int)‘O‘ - 65];
 73             zidian[(int)‘O‘ - 65] = 0;
 74             zidian[(int)‘N‘ - 65] -= tempNum;
 75             zidian[(int)‘E‘ - 65] -= tempNum;
 76             number[1] = tempNum;
 77         }
 78         //查找3 THREE R
 79         if(zidian[(int)‘R‘ - 65] != 0)
 80         {
 81             tempNum = zidian[(int)‘R‘ - 65];
 82             zidian[(int)‘R‘ - 65] = 0;
 83             zidian[(int)‘T‘ - 65] -= tempNum;
 84             zidian[(int)‘H‘ - 65] -= tempNum;
 85             zidian[(int)‘E‘ - 65] -= 2 * tempNum;
 86             number[3] = tempNum;
 87         }
 88         //查找5 FIVE F
 89         if(zidian[(int)‘F‘ - 65] != 0)
 90         {
 91             tempNum = zidian[(int)‘F‘ - 65];
 92             zidian[(int)‘F‘ - 65] = 0;
 93             zidian[(int)‘I‘ - 65] -= tempNum;
 94             zidian[(int)‘V‘ - 65] -= tempNum;
 95             zidian[(int)‘E‘ - 65] -= tempNum;
 96             number[5] = tempNum;
 97         }
 98         //查找7 SEVEN S
 99         if(zidian[(int)‘S‘ - 65] != 0)
100         {
101             tempNum = zidian[(int)‘S‘ - 65];
102             zidian[(int)‘S‘ - 65] = 0;
103             zidian[(int)‘E‘ - 65] -= 2 * tempNum;
104             zidian[(int)‘V‘ - 65] -= tempNum;
105             zidian[(int)‘N‘ - 65] -= tempNum;
106             number[4] = tempNum;
107         }
108         //查找9 NINE I
109         if(zidian[(int)‘I‘ - 65] != 0)
110         {
111             tempNum = zidian[(int)‘I‘ - 65];
112             zidian[(int)‘I‘ - 65] = 0;
113             zidian[(int)‘N‘ - 65] -= 2 * tempNum;
114             zidian[(int)‘E‘ - 65] -= tempNum;
115             number[4] = tempNum;
116         }
117         //转化为字符串输出(保证最小)
118         string sum;
119         for (int i = 0; i < 10; i++)
120         {
121             string temps(number[i],(char)(i+48));
122             sum += temps;
123         }
124         cout << sum << endl;
125     }
126     return 0;
127 }

C++ Code

时间: 2024-10-12 02:19:52

小米面试题:手机分身,电话号码隐藏。的相关文章

验证手机和电话号码

//验证手机和电话var matchMobile = /^1[3|4|5|7|8]\d{9}$/; //验证手机 var matchTel = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/;  //验证电话 var matchMobileAndTel = /^((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8}

卖不动的格力手机背后 原来隐藏着这样的野心

提起格力手机,对手机圈关注的人可能不屑一顾--无论是毫不具有性价比.董明珠的开机动画,还是体验一般的系统等,似乎完全没有购买的价值.而对于普罗大众来说,甚至根本不知道格力推出了手机--但就是这样一款手机,如今却顽强地推出了第三代,让人瞠目结舌.不过销量寥寥的格力手机,还是怎么也卖不动-- 格力手机能坚持到现在,主要原因还是在于董明珠董小姐的坚持.但抛开格力手机本身的优与劣,从大环境上来看,格力手机已经超出了原本一款手机应该承载的职能和影响力.其身上隐藏着的野心,其实是在为家电厂商开了个头.毕竟现

电话号码分身

题目描述 继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"

PHP使用正则表达式验证电话号码(手机和固定电话)

这个还不错,很有用. tel='验证的电话号码'; $isMob="/^1[3-8]{1}[0-9]{9}$/";  $isTel="/^([0-9]{3,4}-)?[0-9]{7,8}$/";  if(!preg_match($isMob,$tel) && !preg_match($isTel,$tel))  {   echo '<script>alert("手机或电话号码格式不正确.如果是固定电话,必须形如(xxxx-xxx

从技术角度深入剖析:改号软件,电话号码任意显示,伪造来电显示

刚才看到乌云有人发帖问:网上流传的修改来电的软件实现原理是什么? 关于这个东西,我还真了解一点(本人涉猎甚广,啥都喜欢研究一番)…… 其实很多年前就有此类技术分析文档,几年前我曾看过一篇技术分析文章,详细讲了这个实现原理,年代久远,尼玛文章找不到了,但是大概内容还记得点,结合搜索,整理了点东西出来. 估计有很多人知道,这种技术是由于不同网络中转发数据用的网关在作怪,但是并不明白更底层的原理,本文将从最底层.最基础的电话传输协议.数据帧开始讲…… 关于修改来电显示号码的原理,这个真的是十分古老的东

swift3.0 顶部状态栏隐藏

横屏进入手机状态栏是隐藏的,但是调用了相册选去图片后顶部状态栏又显示了出来,网上查阅按照以下方式: override var prefersStatusBarHidden: Bool{ return true } 并没有解决 后来发现在viewDidLoad()中加入 UIApplication.shared.isStatusBarHidden = true 解决相册选取图片顶部状态栏显示的问题 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0

php完美匹配邮箱、链接地址和电话号码

php完美匹配邮箱.链接地址和电话号码 写了好一会有问题,朋友这边很好功能,借用了.嘎嘎 2012/01/31日 更新: 匹配手机以及电话号码 重新修改,可支持18开头的手机号,并修改bug,可匹配出字符串中所有匹配号码! 经过多次测试,以下代码可以实现邮箱.链接地址和电话号码的匹配 匹配全部url地址和链接内容 ==================== $str = "<a href='http://www.baidu.com' target='_blank'>百度</a&g

手机体验系列之三

这个系列文章前期回顾: <我体验过的手机们之二> <体验:我买过的手机们> 新增两个: 1, 红米Pro: 优点:手感丝滑:屏幕显示很讨喜:电池续航非常好:MIUI8双卡应用和手机分身很不错: 缺点:照相渣,双摄像头照相效果更是渣,焦外纯靠涂抹根本不是好看的景深效果,摄像头动不动就启动不了要重启才能解决: 2, 锤子M1: 优点:big bang和one step还有老早的九宫格.拟物画风让锤子手机从严重同质化的手机市场中脱颖而出的特点就不说了,喜欢不一样,所以才买不一样的手机:要

为什么手机游戏经常在国际市场上遭遇失败?

根据WSJ,全球手机游戏市场的价值有可能在2017翻八倍,即从2010年的37.7亿美元快速发展到296亿美元.而在全世界中,以中国和日本为首的亚太地区更是手机游戏开发商的最大市场,即48%的全球收益是来自这里,并且这里的付费玩家数更是排名第二的北美区域的3倍. 基于这些数据,我们便不会对每年有无数手机游戏尝试着扩展海外市场这一举动感到惊讶:但事实上却很少有游戏能够取得真正意义上的成功. 部分原因是手机游戏已经成为了当代的淘金热现象.来自世界各地的开发者涌入市场希望能够在此发横财,从而导致今天的