POJ 1002 487-3279

问题描述:http://poj.org/problem?id=1002

 这道题目阅读起来没什么问题,但是很坑!很坑!很坑!重要的事情说三遍!我已经记不清WA多少次了!


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char map[26] = {'2', '2', '2', '3', '3', '3', '4', '4', '4', 
                '5', '5', '5', '6', '6', '6', '7', '7', '7', 
                '7', '8', '8', '8', '9', '9', '9', '9'};//按键映射表

char phone[100000][9];    //全部电话号码

int n;                    //电话号码的数量

char number[80];        //一个未经处理的电话号码


int main(void)
{
    int loop;                    //循环变量

    int phone_i=0, phone_j=0;    //phone数组的下标

    int tag = 0;                //重复标志,0没有处于一个重复,1有重复

    int count = 1;                //重复次数


    scanf("%d", &n);

    for(phone_i=0; phone_i<n; phone_i++){//格式化所有输入数据为111-1111的形式

        scanf("%s", number);
        for(loop=0; number[loop]!='\0'; loop++){//检查每一个字符

            if(phone_j == 3){//第四个字符必须是'-'

                phone[phone_i][phone_j] = '-';
                phone_j++;
            }
            if(number[loop]>='0' && number[loop]<='9'){//当前字符是数字

                phone[phone_i][phone_j] = number[loop];
            }
            else if(number[loop]>='A' && number[loop]<='Z'){//当前字符是大写字母

                phone[phone_i][phone_j] = map[number[loop]-'A'];
            }
            else if(number[loop] == '-'){//忽略'-'

                continue;
            }
            phone_j++;
        }
        phone_j = 0;
    }
    
    //排序全部电话号码

    qsort(phone, n, 9, strcmp);

    for(loop=1; loop<n; loop++){//检查重复次数,输出结果

        if(strcmp(phone[loop], phone[loop-1]) == 0){
            tag = 1;
            count++;
        }
        else{//没有重复

            if(count > 1){
                printf("%s %d\n", phone[loop-1], count);
            }
            count = 1;
        }
    }
    if(count > 1){//查看最后一条记录是否有重复

        printf("%s %d\n", phone[loop-1], count);
    }
    if(!tag) 
        printf("No duplicates.\n");
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值