| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我的TLE了,哪位大牛给看看这是我的源代码,思路是一般的思路:
#include <stdio.h>
#include <string.h>
int main()
{
int n; //n个电话号码
int showCnt; //某个电话号码出现的次数
int i, j, k; //循环变量
char numList[100000][20]; //存输入的、处理后的电话号码
char tmp[20]; //中间变量,排序时使用
char notPrint = 1; //标记变量,置1表示没有打印
scanf("%d", &n);
for(i = 0; i < n; ++i)
{
scanf("%s", tmp);
//将输入的电话号码编程纯数字的形式
for(j = 0, k = 0; j < strlen(tmp); ++j)
{
if(tmp[j] >= '0' && tmp[j] <= '9')
{
tmp[k++] = tmp[j];
}
else
{
switch(tmp[j])
{
case 'A':
case 'B':
case 'C':
tmp[k++] = '2';
break;
case 'D':
case 'E':
case 'F':
tmp[k++] = '3';
break;
case 'G':
case 'H':
case 'I':
tmp[k++] = '4';
break;
case 'J':
case 'K':
case 'L':
tmp[k++] = '5';
break;
case 'M':
case 'N':
case 'O':
tmp[k++] = '6';
break;
case 'P':
case 'R':
case 'S':
tmp[k++] = '7';
break;
case 'T':
case 'U':
case 'V':
tmp[k++] = '8';
break;
case 'W':
case 'X':
case 'Y':
tmp[k++] = '9';
break;
} //end of switch
}
} // end of for
tmp[k] = 0;
strcpy(numList[i] ,tmp); //将处理完的电话号码存入数组
}
//选择排序,升序
for(i = 0; i < n - 1; ++i)
{
k = i;
for(j = i + 1; j < n; ++j)
{
if(strcmp(numList[j], numList[k]) < 0)
{
k = j;
}
}
if(k != i)
{
strcpy(tmp, numList[i]);
strcpy(numList[i], numList[k]);
strcpy(numList[k], tmp);
}
}
//检查输出
for(i = 0; i < n - 1; i += showCnt)
{
showCnt = 1;
for(j = i + 1; j < n; ++j)
{
if(!strcmp(numList[i], numList[j]))
{
showCnt++;
}
}
if(showCnt > 1)
{
printf("%c%c%c-", numList[i][0], numList[i][1], numList[i][2]);
printf("%s %d\n", numList[i] + 3, showCnt);
notPrint = 0;
}
}
if(notPrint)
{
printf("No duplicates.\n");
}
return 0;
}
希望大牛给点指点,谢谢啦
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator