UVa 755 - 487--3279

来源:互联网 发布:观网络知识防诈骗有感 编辑:程序博客网 时间:2024/06/05 00:18

题目:给你一些由字母、数字和'-'组成的串,每个字母对应一个数,输出按顺序输出每个数字出现的次数。

分析:字符串、排序。首先建立字母到数的映射,然后吧所有的串都转化成数字。统计、排序、输出。

说明:POJ1002。

#include <iostream>#include <iomanip>#include <cstdlib>#include <cstring>#include <string>#include <cstdio>using namespace std;int phone[26] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9};string a[100001];int hash[10000001];int main(){    int T,N;while ( cin >> T ) while ( T -- ) {cin >> N;    memset( hash , 0 , sizeof( hash ) );    for ( int i = 0 ; i < N ; ++ i )        cin >> a[ i ];    for ( int i = 0 ; i < N ; ++ i ) {        int len = a[ i ].length();        int numb = 0;        for ( int j = 0 ; j < len ; ++ j ) {            if ( a[ i ][ j ] == '-' ) continue;            numb *= 10;            if ( a[ i ][ j ] >= '0' && a[ i ][ j ] <= '9' )                numb += a[ i ][ j ] - '0';            else                numb += phone[ a[ i ][ j ] - 'A' ];        }        if ( numb < 10000000 )        hash[ numb ] ++;    }    int sum = 0;    for ( int i = 0 ; i < 10000001 ; ++ i )    if  ( hash[ i ] > 1 ) {        cout << setfill('0') << setw( 3 ) << ( i/10000 ) << "-";         cout << setfill('0') << setw( 4 ) << ( i%10000 ) << " ";         cout << hash[ i ] << endl;        sum ++;    }    if ( !sum ) cout << "No duplicates.\n";    if ( T ) printf("\n");}    return 0;}

0 0