UVa 755 - 487--3279

又是一篇血泪史.

这个题目和POJ1002是差不多的,先前已经做过一遍

大概半个小时后就完成了..

但是以为跟POJ上的一样,要处理Q和Z..就又折腾了一些时间.

折腾来折腾去不管怎么提交都是WA...推敲了好几遍我的思路,确认是没有问题的..于是就去睡觉了..

但是一道题目没解决..觉也睡不好.于是早上六点就醒了,又重新看了一遍程序.还是没有头绪,总感觉输出有问题..

于是又看了好几遍,才发现循环输出的时候多输出了一位

果然每次到数组就要死一次

思路就是把每个输入先存到buf数组里,再转化为数字存到二维数组里,用qsort排序,然后计数输出.

注意数组的临界.


PS:UVA这题根本不用考虑输入包括Q和Z时候的情况..而且题目里明明说了Excluding Q and Z.而POJ....╮(╯▽╰)╭


#include 
#include 
#include 
#include 
int Search(char c);
int comp(const void *_a, const void *_b)
{
    char *a = (char *) _a;
    char *b = (char *) _b;
    return strcmp(a,b);
}
char word[110000][300];
char buf[300];
char str1[] = "ABCDEFGHIJKLMNOPRSTUVWXY";
char str2[] = "222333444555666777888999";
int main()
{
    //freopen("input.txt", "r", stdin);
    int flag = 0;
    int i, j, T, n, k = 0, k1 = 0;
    int count = 1;
    scanf("%d", &T);
    while (T--)
    {
        count = 1;
        k1 = 0;
        flag = 0;
        memset(word, 0, sizeof(word));
        scanf("%d", &n);
        getchar();
        for (i = 0; i < n; i++)     //依次读取字符串.
        {
            k = 0;
            memset(buf, 0, sizeof(buf));
            gets(buf);
            for (j = 0; j < strlen(buf); j++)       //把缓冲数组中的字符转化并存入正式数组
            {
                if (buf[j] == '-')
                    continue;
                else
                {
                    if (isalpha(buf[j]))
                    {
                        int a = Search(buf[j]);     //查找当前字母所代表的数字.
                        word[i][k++] = str2[a];
                    }
                    else
                        word[i][k++] = buf[j];
                }
            }
        }
        //读取完毕,下面进行排序.
        qsort(word, n, sizeof(word[0]), comp);
        for (i = 0; i < n - 1 ; i++)
        {
            if (!strcmp(word[i], word[i + 1]))
            {
                count++;
            }
            else
            {
                if (count > 1)
                {
                    flag = 1;
                    printf("%c%c%c-%c%c%c%c %d\n", word[i][0],word[i][1],word[i][2],word[i][3],word[i][4],word[i][5],word[i][6], count);
                    count = 1;
                }
            }
            if (!strcmp(word[i], word[i + 1]) && i == n - 2)
            {
                if (count > 1)
                {
                    flag = 1;
                    printf("%c%c%c-%c%c%c%c %d\n", word[i][0],word[i][1],word[i][2],word[i][3],word[i][4],word[i][5],word[i][6], count);
                    count = 1;
                }
            }
        }
        if (flag == 0)
        {
            printf("No duplicates.\n");

        }
        if (T >= 1)
            printf("\n");
    }
}
int Search(char c)
{
    for (int i = 0; i < strlen(str1); i++)
    {
        if (str1[i] == c)
            return i;
    }
}




你可能感兴趣的:(UVa,String)