POJ_1002

http://poj.org/problem?id=1002

此题大意为输入一系列电话号,输出重复出现的电话号

输入:可以输入大写字母(除了Q和Z),数字或者横线(-)

           字母按拼音九键的对应规则,横线为无意义输入

算法:先把输入整理为七位数字,存进b[N]

           将b[N]用sort(b,b+n)排序

输出:遍历b,若有重复,记录重复次数,按111-1111 n格式输出(n为重复次数)

           若无重复,输出No duplicates.

//输入
//格式化输入
//直接插入排序
//输出重复
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 100000
int main(){
    int n,i,j,p,q,sum;
    string s;
    int b[N+1],temp;
    char c[100];
    
    scanf("%d",&n);
    for(i=0;i<n+1;i++){
        b[i] = 0;
    }
    i = 0;
    
    while(i<n){                                        
        scanf("%s",c);
        
        p = 7;
        q = 1000000;
        temp = 0;
        for(j=0;j<strlen(c)&&p>0;j++,p--,q/=10){    //对输入数据进行加工 
            if(c[j]=='A'||c[j]=='B'||c[j]=='C'){
                temp += 2*q;
            }
            else if(c[j]=='D'||c[j]=='E'||c[j]=='F'){
                temp += 3*q;
            }
            else if(c[j]=='G'||c[j]=='H'||c[j]=='I'){
                temp += 4*q;
            }
            else if(c[j]=='J'||c[j]=='K'||c[j]=='L'){
                temp += 5*q;
            }
            else if(c[j]=='M'||c[j]=='N'||c[j]=='O'){
                temp += 6*q;
            }
            else if(c[j]=='P'||c[j]=='R'||c[j]=='S'){        //没有Q 
                temp += 7*q;
            }
            else if(c[j]=='T'||c[j]=='U'||c[j]=='V'){
                temp += 8*q;
            }
            else if(c[j]=='W'||c[j]=='X'||c[j]=='Y'){        //没有Z 
                temp += 9*q;
            }
            else if(c[j]>='0'&&c[j]<='9'){
                temp += (c[j]-'0')*q;
            }
            else{
                p++;
                q *= 10;
            }
        }
        b[i] = temp;
        //cout<<temp;
/*        j = i;
        while(temp<b[j]){
            b[j+1] = b[j];
            j--;
        }
        b[j+1] = temp;
        //cout<<temp<<" "<<j+1<<endl;
        for(j=1;j<=i;j++){
            cout<<b[j]<<" "<<j<<endl;
        }
*/        i++;
    }//while
    sort(b,b+n);
    b[n] = -1;
    
    p = 0;
    q = 1;
    sum = 0;
    while(q<n){
        while(b[q]==b[p]){
            q++;
        }
        if(q-p>1){
            printf("%03d-%04d %d\n",b[p]/10000,b[p]%10000,q-p);
            sum++;
        }
        p = q;
        q = q+1;
    }
    if(sum==0){
        printf("No duplicates.\n");
    }
 
/*
    for(i=1;i<=n;i++){
        cout<<b[i]<<" "<<endl;
    }
    for(i=1,j=0;i<=sum;i++){
        //if(duplicate[i]>1){
            p = b[i]/10000;
            q = b[i]%10000;
            cout<<p<<"-"<<q<<" "<<duplicate[i]<<endl;
            j++;
        }
    }
*/
    return 0;
} 

 


————————————————
版权声明:本文为****博主「abc827300139」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/ABC827300139/article/details/101788281

上一篇:1002. Find Common Characters


下一篇:1002.查找常用字符串