Read Phone Number - Round A China New Grad Test 2014 - 循环控制

来源:互联网 发布:财务 知乎 编辑:程序博客网 时间:2024/06/05 15:00

Read Phone Number

题意:主要考察对循环的控制。难度:2星。

题目不算复杂,解题思路比较清晰,但在关键的几行代码上,需要仔细对循环的临界值进行仔细斟酌。

刚开始写的时候,并没有考虑全面,需要用测试用例慢慢调试。

粗心少写一行输出,导致在大数据用例处出现错误。

题解代码:

/* *Read Phone Number - Round A China New Grad Test 2014 * * */#include <iostream>#include <fstream>using namespace std;#define MAX_NUMBER_LENGTH 101char numberString[][8] = {" zero", " one", " two", " three", " four", " five", " six", " seven", " eight", " nine"};int main(){ifstream inputFile;ofstream outputFile;int T;char phoneNumber[MAX_NUMBER_LENGTH];int format[MAX_NUMBER_LENGTH];int devideCnt, sameCnt, numLen;int caseNo, i, j, k;char numInEnglish[8];inputFile.open("E:\\C++\\GCJ\\China New Grad Test 2014\\Round A\\Read Phone Number\\A-large-practice.in");outputFile.open("E:\\C++\\GCJ\\China New Grad Test 2014\\Round A\\Read Phone Number\\A-large-practice.out");inputFile >> T;for (caseNo = 1; caseNo <= T; caseNo++){cout << "Case #" << caseNo << ':';outputFile << "Case #" << caseNo << ':';inputFile >> phoneNumber;numLen = strlen(phoneNumber);inputFile >> format[0];for (i = 1, numLen -= format[0]; numLen; i++){/* 将读数格式存入整型数组 */inputFile.get();/* 吸收'-' */inputFile >> format[i];numLen -= format[i];}devideCnt = i;/* 记录号码被分成的段数 */for (i = 0, j = 0; i < devideCnt; i++)/* 分段处理 */{for (k = 0; k < format[i]; )/* 对于每一段 */{/* 对临界值的斟酌很重要!!! *//* 这段代码慢慢琢磨 *//* 计算号码重复的次数 */for (sameCnt = 1; phoneNumber[j + k] == phoneNumber[j + 1 + k++] && k < format[i]; sameCnt++);switch (sameCnt){case 1:break;case 2:cout << " double";outputFile << " double";break;case 3:cout << " triple";outputFile << " triple";break;case 4:cout << " quadruple";outputFile << " quadruple";break;case 5:cout << " quintuple";outputFile << " quintuple";break;case 6:cout << " sextuple";outputFile << " sextuple";break;case 7:cout << " septuple";outputFile << " septuple";break;case 8:cout << " octuple";outputFile << " octuple";break;case 9:cout << " nonuple";outputFile << " nonuple";break;case 10:cout << " decuple";outputFile << " decuple";break;default:for (int tmp = 0; tmp < sameCnt - 1; tmp++){/* 连续的数字超过11个时,循环输出 重复次数-1 次 *//* 因为下段语句还会输出最后一次 */cout << numberString[phoneNumber[j + k - 1] - '0'];outputFile << numberString[phoneNumber[j + k - 1] - '0'];}}//switch (sameCnt)cout << numberString[phoneNumber[j + k - 1] - '0'];outputFile << numberString[phoneNumber[j + k - 1] - '0'];}//for (k = 0; k < intFormat[i]; )j += format[i];}//for (i = 0, j = 0; i < devideCnt; i++)cout << endl;outputFile << endl;}//for (caseNo = 1; caseNo <= T; caseNo++)inputFile.close();outputFile.close();system("pause");return 0;}


0 0
原创粉丝点击