##报错wrong answer
#include <iostream>
#include <string.h>
#include <algorithm>
#define max 100100
using namespace std;
void tiqu(char arr[max]) //提取arr中的有效字符
{
char brr[max];
for (int i = 0, j = 0; i < strlen(arr); i++)
{
if (arr[i] != '-')
{
brr[j] = arr[i];
j++;
}
}
memset(arr, 0, strlen(arr));
for (int i = 0; i < strlen(brr); i++)
{
arr[i] = brr[i];
}
}
char ys(char ch)
{
char c;
if (ch == 'A' || ch == 'B' || ch == 'C')
{
c = '2';
}
else if (ch == 'D' || ch == 'E' || ch == 'F')
{
c = '3';
}
else if (ch == 'G' || ch == 'H' || ch == 'I')
{
c = '4';
}
else if (ch == 'J' || ch == 'K' || ch == 'L')
{
c = '5';
}
else if (ch == 'M' || ch == 'N' || ch == 'O')
{
c = '6';
}
else if (ch == 'P' || ch == 'R' || ch == 'S')
{
c = '7';
}
else if (ch == 'T' || ch == 'U' || ch == 'V')
{
c = '8';
}
else if (ch == 'W' || ch == 'X' || ch == 'Y')
{
c = '9';
}
else
{
c = ch;
}
return c;
}
int main()
{
long long n, len;
long long temp, sum;
char arr[max], sd[max];
long long brr[max];
while (cin >> n)
{
for (int i = 0; i < n; i++)
{
temp = 1;
sum = 0;
cin >> arr;
tiqu(arr);
for (int j = 0; j < strlen(arr); j++) //将电话号码存入数组
{
sd[j] = ys(arr[j]);
}
for (int i = strlen(sd) - 1; i > -1; i--)
{
sum += ((sd[i] - '0') * temp);
temp *= 10;
}
brr[i] = sum;
memset(arr, 0, strlen(arr));
memset(sd, 0, strlen(sd));
}
sort(brr, brr + n); //排序 输入首尾地址 默认为从小到大
int flag = 0;
int count = 1, i;
for (i = 1; i < n; i++)
{
if (brr[i] == brr[i - 1])
count++;
else
{
if (count > 1)
{
printf("%03d-%04d %d\n", brr[i - 1] / 10000, brr[i - 1] % 10000, count);
//cout<<brr[i-1]/10000<<"-"<<brr[i-1]%10000<<" "<<count<<endl;
flag = 1;
}
count = 1;//更新
}
}
if (count > 1)
{
printf("%03d-%04d %d\n", brr[i - 1] / 10000, brr[i - 1] % 10000, count);
//cout<<brr[i-1]/10000<<"-"<<brr[i-1]%10000<<" "<<count<<endl;
flag = 1;
}
if (flag == 0)
cout << "No duplicates." << endl;
}
system("pause");
return 0;
}
85~89行:数字相加时,没有考虑到Q和Z
for (int i = strlen(sd) - 1; i > -1; i--)
{
sum += ((sd[i] - '0') * temp);
temp *= 10;
}
应判断当前字符是否为Q或Z,是Q或Z则不能相加