OJ 系列之重複的電話號碼(C_C++)

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
解題思路:首先建立題目要求的映射關係,其次將輸入的字符串進行提取,轉換成電話號碼,利用map容器的有序性質進行存儲電話號碼,電話號碼自動有序,然後按照題目要求進行輸出即可。

#include <stdlib.h>
#include "PhoneBookProcess.h"


/*
功能: 檢查是否有兩個或多個公司擁有相同的電話號碼,並統計輸出

輸入參數: inFileName  - 包含個性電話號碼個數與列表的源文件名      
        [格式請見題目說明PPT]
        outFileName - 輸出統計重複號碼的結果的目標文件名                 
        [格式請見題目說明PPT]

輸出參數: 無
返回: 0 - 成功
        1 - 其它各種錯誤,如文件不存在
*/

int PhoneBookProcess(const char *inFileName,const char *outFileName) 
{

    if(freopen(inFileName,"r",stdin)==NULL)
      return 1;

    if(freopen(outFileName,"w",stdout)==NULL)
      return 1;
    /*1.映射關係,可以優化成
    char hsm[]="222333444555666777888999"*/
    int hsm[26];
    hsm[0]=2;
    hsm[1]=2;
    hsm[2]=2;
    hsm[3]=3;
    hsm[4]=3;
    hsm[5]=3;
    hsm[6]=4;
    hsm[7]=4;
    hsm[8]=4;
    hsm[9]=5;
    hsm[10]=5;
    hsm[11]=5;
    hsm[12]=6;
    hsm[13]=6;
    hsm[14]=6;
    hsm[15]=7;
    hsm[16]=7;
    hsm[17]=7;
    hsm[18]=7;
    hsm[19]=8;
    hsm[20]=8;
    hsm[21]=8;
    hsm[22]=9;
    hsm[23]=9;
    hsm[24]=9;
    hsm[25]=9;
    int n;
    int cas=0;

    char str[50];
    scanf("%d",&n);

    /**/
    map<int,int> m;
    map<int,int>::iterator it;
    bool flag=false;

    for(cas=0;cas<n;cas++) {
        scanf("%s",str);
        int num=0;
        int len=strlen(str); 
        /*將字符串轉換成電話號碼*/
        for(int i=0;i<len;i++) {
            if(str[i]>='0'&&str[i]<='9')
                num=num*10+str[i]-'0';
            else if(str[i]>='A'&&str[i]<='Z')
                num=num*10+hsm[str[i]-'A'];  /*對應關係*/
            else if(str[i]>='a'&&str[i]<='z')
                num=num*10+hsm[str[i]-'a'];
        }    
        if(num==0)
            continue;
        m[num]++;
    }   
    /**/
    for(it=m.begin();it!=m.end();it++) {
          if(it->second>1)
            flag=true;
    }
    if(flag==false)
        printf("No duplicates.\n");
    else {
         for(it=m.begin();it!=m.end();it++) {
            if(it->second>1) 
                printf("%d %d\n",it->first,it->second);
        }
    }

    fclose(stdin);
    fclose(stdout);

    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章