题目
分析
给出一些电话号码的字符串,进行清洗和转义,输出重复的电话(即出现次数>=2),如果该组测试数据没有重复要输出No duplicates
。
思路
可以视电话号码为数字,利用桶排序存储次数,格式方面利用占位符,如%03d
表示打出宽度为3的,以0填充的数字。
代码
#include <stdio.h>
#include <string.h>
int bucket[10000000];
int main(void) {
const char *f = "2223334445556667 77888999 ";
int t, n, i, p, min, max;
char tel[100];
while (scanf("%d", &t) != EOF) {
while (t--) {
memset(bucket, 0, sizeof(bucket));
min = 9999999;
max = 0;
scanf("%d", &n);
while (n--) {
scanf("%s", tel);
p = 0;
for (i = 0; i < strlen(tel); i++) {
if (tel[i] >= 'A' && tel[i] <= 'Z')
tel[i] = f[tel[i] - 'A'];
if (tel[i] >= '0' && tel[i] <= '9')
p = p*10 + tel[i] - '0';
}
min = min < p? min: p;
max = max > p? max: p;
bucket[p]++;
}
for (i = min, p = 0; i <= max; i++)
if (bucket[i] > 1) {
printf("%03d-%04d %d\n", i/10000, i%10000, bucket[i]);
p++;
}
if (!p) printf("No duplicates.\n");
if (t) printf("\n");
}
}
return 0;
}