这几天看到了谷歌对中国2014年毕业生出的一道编程题,我自己试着做了一下,还是感觉谷歌出的题都比较有趣,和实际都有一些联系,我将其大概意思翻译成中文,并附上自己写的code。
Prolbem:
对于读一串数字,每个人都有自己的风格。我们的手机号都是11位数,不同的人如何有不同的读法,有人按3-4-4的方式读,有人按3-5-3的方式读,还有人按3-3-5的方式读,平时在问及他人手机号的时候,都会遇到这种情况。举个例子:像手机号15212336667,有人就会说152 1233 6667,有人就会说152 12336 667等。但在英语中,如果你按照152 1233 6667来报号码的时候,都会这样说:one five two, one two double three, triple six seven。 所以问题就来了,如何让计算机能够像人一样根据不同的读取规则智能地读一串数字呢?
问题条件:
1. 单独不连续的数字就单个读;
2. 2个连续就用double;
3. 3个连续就用triple;
4. 4个连续就用quadruple;
5. 5个用quintuple;
6. 6个用 sextuple;
7. 7个用septuple;
8. 8个用octuple;
9. 9个用nonuple;
10. 10个用decuple;
11. 如果多余10个连续的数字,就分别单个读取。
如下图为输入和输出的格式样例,输入的第一行表示有几个输入样例,其中每个样例包括数字串和读取数字的格式:
解决方法:
我的解决方法就是根据读取格式将数字串进行分割,对分割后的每个部分进行单独处理,处理的时候就是进行匹配,如果连续两个相同,就对应输出double,然后跟上相应的数子,一次类推。。。。。。如果大侠们有什么地方可以改进的,请指导指导小弟!
下面是主要处理函数的代码:
#define PLUSLOOP(I, N) for (UINT I = 0; I < (N); ++I) char ten[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"}; char name[11][10]={"","","double","triple","quadruple","quintuple","sextuple","septuple","octuple","nonuple","decuple"}; void ReadPhoneNumber(string phoneNum, string format) { int n = 0, m = 0; istringstream num(format); while( num >> n ) { for( int i = m, k; i < m+n; i=k ) { for( k = i+1; k < m+n; k++ ) if( k< phoneNum.size() && phoneNum[i] != phoneNum[k] ) break; if( k-i < 2 || k-i > 10 ) PLUSLOOP(p,k-i) cout<<ten[phoneNum[i]-'0']<<' '; else cout<<name[k-i]<<' '<<ten[phoneNum[i]-'0']<<' '; } m += n; } cout<<endl; }
相关推荐
phoneNumber, // 用户输入的电话号码 60, // 验证码过期时间(秒) TimeUnit.SECONDS, // 时间单位 getApplicationContext(), // 上下文 new PhoneNumberAuthProvider.OnVerificationStateChangedCallbacks() {...
Console.WriteLine($"ID: {id}, Name: {name}, PhoneNumber: {phoneNumber}"); } } } } ``` 4. 错误处理和最佳实践: - 在数据库操作中,务必使用`using`语句处理数据库连接和命令对象,以确保它们在使用完毕...
这个系统主要涉及了三个关键类:`User`、`PhoneNumber`和`BookEntry`,旨在帮助学生深入理解和应用Java的面向对象特性,如类、对象、封装等概念。 1. **User类**: - `User`类代表通讯录中的联系人信息,包含两个...
描述中的错误信息“ERROR: Could not read unit serial number!”表明在使用过程中遇到了读取设备序列号的问题。在J-Link调试过程中,通常需要连接到目标设备并识别其序列号以验证授权或进行特定操作。如果无法读取...
综上所述,"Read IMEI from Android phone"这一主题涵盖了Android权限管理、系统API使用、数据安全、设备识别等多个方面的知识,是Android开发中的一个重要环节。正确理解和运用这些知识点,可以帮助开发者构建出更...
这个名为"READ_car_number.zip"的压缩包文件显然包含了关于车牌识别的相关资料,特别是聚焦于号码识别、模糊车牌识别、车牌Read以及边缘提取等核心环节。下面将详细解析这些知识点。 1. **号码识别**:这是整个车牌...
JAVA读取硬盘序列号经典程序源码JAVA program to read hard disk serial number of the classical source
Oh, yes, and you’ll want to also check your email, run apps, read books, and browse Amazon. Before you do that, though, you need a solid understanding of how the Fire phone works and familiarity ...
As each number is read, print it only if it is not a duplicate of a number already read. Prepare for the “worst case” in which all 20 numbers are different. Use the smallest possible array to solve...
As each number is read, print it only if it is not a duplicate of a number already read. Prepare for the “worst case” in which all 20 numbers are different. Use the smallest possible array to solve...
haarcascade_russian_plate_number.xml
6. **权限管理**:在Android系统中,访问电话功能需要特定的权限,如`READ_PHONE_STATE`和`CALL_PHONE`。Phone应用必须正确配置这些权限才能正常工作。 7. **UI设计**:Phone应用的用户界面通常包含拨号盘、联系人...
例如,拨打电话、读取通话记录等敏感操作,需要相应的权限(如CALL_PHONE、READ_CALL_LOG)。开发者必须正确请求并使用这些权限,否则可能导致应用崩溃或者功能受限。 最后,Android的多线程编程也是源码分析的重要...
Log.i("PhoneNumber", "获取到的电话号码为: " + phoneNumber); } ``` 此外,由于Android版本的不同,有些API可能在某些设备上不可用。为了保证兼容性,可以使用反射或者其他替代方式来获取电话号码。例如,在...
9. **权限管理**:电话相关操作通常需要特殊的权限,如`READ_PHONE_STATE`和`CALL_PHONE`。应用必须在Manifest文件中声明这些权限才能执行相应操作。 10. **电话适配器(PhoneAdapter)**:这是一个抽象层,用于...
标题中的“READ-YOUR-NUMBER.zip_有趣 vb”表明这是一个使用Visual Basic(VB)编写的程序,其功能是能够读取并语音播报用户输入的数字。VB是一种面向对象的编程语言,尤其适合开发Windows应用程序。这个程序可能...
首先,为了在Android应用中实现打电话功能,我们需要在`AndroidManifest.xml`文件中声明`READ_PHONE_STATE`和`CALL_PHONE`权限。这两个权限至关重要,因为`READ_PHONE_STATE`允许应用读取电话的状态,而`CALL_PHONE`...
联想工程师专用小工具 内存不能为read修复工具V2.15.1联想工程师专用小工具 内存不能为read修复工具V2.15.1联想工程师专用小工具 内存不能为read修复工具V2.15.1联想工程师专用小工具 内存不能为read修复工具V2.15.1...
Person::PhoneNumber::MOBILE : Person::PhoneNumber::HOME); } ``` #### 2.2.2 msg的读取 读取消息同样简单,只需调用对应的方法: ```cpp Person read_person; if (person.ParseFromString(input_data)) { // ...