题意:将字符串转化为数字,并排序统计重复数。难度:2星。
/*
* POJ 1002 487-3279
* 将字符串转化为数字,并排序统计重复数;
*
* 字符数转化值得注意:
* string map("2223334445556667#77888999#");
* number = number *10 + (map[input[i] - 'A'] - '0');
* 电话号码的输入字符数组开大点,开40过不了!
* 格式化输出:
* printf("%03d-%04d %d\n", numBook[i - 1] / 10000, numBook[i - 1] % 10000, dulCnt);
*
*/
#include <iostream>
#include <algorithm>
using namespace std;
int convert(char []);
string map("2223334445556667#77888999#");
int main()
{
int n;
char input[400]; /* 数组开大点! */
int *numBook;
int i, dulFlag, dulCnt;
cin >> n;
numBook = new int [n];
i = 0;
while (i < n)
{
cin >> input;
numBook[i++] = convert(input);
}
sort(numBook, numBook + n);
for (i = 1, dulFlag = 0; i < n; i++)
{
dulCnt = 1;
while (i < n && numBook[i] == numBook[i - 1])
{
dulCnt++;
i++;
}
if (dulCnt > 1)
{ /* 格式化输出 */
printf("%03d-%04d %d\n", numBook[i - 1] / 10000, numBook[i - 1] % 10000, dulCnt);
dulFlag = 1;
}
}
if (!dulFlag)
{
cout << "No duplicates. \n";
}
delete [] numBook;
return 0;
}
int convert(char input[])
{
int number;
int i;
for (i = 0, number = 0; input[i] != '\0'; i++)
{
if (input[i] >= '0' && input[i] <= '9')
{
number = number * 10 + (input[i] - '0');
}
else if (input[i] >= 'A' && input[i] <= 'Y' && input[i] != 'Q')
{
/* 字符数转化值得注意 */
number = number *10 + (map[input[i] - 'A'] - '0');
}
}
return number;
}

本文介绍了一道名为POJ1002487-3279的编程题目,该题要求将电话号码形式的字符串转换为数字并进行排序和重复次数的统计。文章详细解释了字符串到数字的转换方法及如何使用C++实现这一过程。
948

被折叠的 条评论
为什么被折叠?



