poj1002,求找错。我是用二维字符串数组读取,并快速排序,然后找出同样的字符串。但是一直wrong answer

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>charcor[]={"22... #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

char cor[]={"22233344455566677778889999"};

void convert(char str[20], char *number)
{
int i, j = 0;
char c;
for (i = 0; i < 20; i++) {
c = str[i];
if (c == '-') continue;
if (c >= 65 && c <= 89) { number[j] = cor[c-65]; j++;}
else { number[j] = str[i]; j++;}
if (j == 3) { number[j] = '-'; j++;}
}
number[j] = '\0';

}

void quicksort(char (* number)[9], long l, long r)
{
long i, j;
char temp[9];
if (l >= r) return; /* 边界不合法,结束 */
i = l, j = r;
strcpy(temp, number[i]); /* 设置左右并保存基准记录 */
while (i != j)
{ /* 向前扫描 */
while ( strcmp(number[j], temp) >= 0 && j > i) j--;
if (i < j) strcpy(number[i++], number[j]); /* 交换 */
/* 向后扫描 */
while ( strcmp(number[i], temp) <= 0 && i < j) i++;
if (i < j) strcpy(number[j--], number[i]); /* 交换 */
}
strcpy(number[i], temp); /* 基准移动到最终位置 */
quicksort(number, l, i-1); /* 分别对左右区间进行快速排序 */
quicksort(number, i+1, r);

}

int main()
{
long n;
long i, j, count = -1;
char (*number)[9];
char str[20];
// FILE *fp;

// if ((fp = fopen("data.txt","r")) == NULL) exit(0);
// fscanf(fp, "%d", &n);
scanf("%d", &n);
number=(char (*)[9])malloc(sizeof(char) * 9 * n);
for (i = 0; i < n; i++) {
// fscanf(fp, "%s", str);
scanf("%s", str);
convert(str, number[i]);
}
quicksort(number, 0, n - 1);

for (i = 0; i < n; i++) {
if (strcmp(number[i], number[i+1]) == 0) {
count = 2, j = i + 1;
printf ("%s", number[i]);
while (strcmp(number[j], number[j+1]) == 0 && j < n) { count++; j++;}
printf (" %d\n", count);
i = j;
}
}
if (count == -1) printf("No duplicates.\n");
// fclose(fp);
return 1;
}
POJ1002
Description
电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:
A, B, 和C 映射到 2
D, E, 和F 映射到 3
。。。
W, X, 和Y 映射到 9
Q和Z没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 TUT-GLOP的标准格式是888-4567,310-GINO的标准格式是310-4466。
如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号)
input
输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量(最多100000)。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了Q和Z)以及连接符组成。每个电话号码中只会刚好有7个数字或者字母。
Output
对于每个出现重复的号码产生一行输出,输出是号码的标准格式紧跟一个空格然后是它的重复次数。如果存在多个重复的号码,则按照号码的字典升序输出。如果输入数据中没有重复的号码,输出一行:
No duplicates.

Sample Input
12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279

Sample Output
310-1010 2
487-3279 4
888-4567 3
展开
 我来答
hunnully
2012-04-03 · TA获得超过224个赞
知道答主
回答量:173
采纳率:0%
帮助的人:140万
展开全部
这个问题我也做了很久很久。
至今还是WA~~~~~~~
大概是有什么恶心的边缘数据没有想到吧~~~
祝楼主好运!!~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式