pku 1002 487-3279
来源:互联网 发布:网络用语2017最新 编辑:程序博客网 时间:2024/05/17 08:45
http://acm.pku.edu.cn/JudgeOnline/problem?id=1002
本题大意是把输入的电话号码规范化并排序、并输出所有不同的电话号码、以及其出现的次数
代码如下:
#include<iostream>
#include<string>
#include<vector>
#include<cctype>
#include<algorithm>
#include<cstddef>
using namespace std;
#define MAX 100000
int caseNum;
int counter[MAX]; //全局变量自动初始化为0
bool duplicate=false;
vector<string> processedNumber;
char map(char c){ //字母的映射函数
char tmp;
switch(c){
case 'A':
case 'B':
case 'C':tmp=48+2;break;
case 'D':
case 'E':
case 'F':tmp=48+3;break;
case 'G':
case 'H':
case 'I':tmp=48+4;break;
case 'J':
case 'K':
case 'L':tmp=48+5;break;
case 'M':
case 'N':
case 'O':tmp=48+6;break;
case 'P':
case 'R':
case 'S':tmp=48+7;break;
case 'T':
case 'U':
case 'V':tmp=48+8;break;
case 'W':
case 'X':
case 'Y':tmp=48+9;break;
}
return tmp;
}
string strip(string num){ //去除字符串中的'-'
string tmp(8,'0');
int j=0;
for(size_t i=0; i<num.length(); i++){
if( num[i]=='-')
continue;
else
tmp[j++]=num[i];
}
return tmp;
}
void process(string num){ //对号码中的大写字母进行映射处理
num=strip(num); //处理前的电话号码不一定是7位的
for(int i=0;i<7;i++){ //电话号码固定为7位
if( isdigit(num[i]))
continue;
if(isalpha(num[i]))
num[i]=map(num[i]);
}
for(int j=6;j>=3;j--) //把号码转化为标准形式
num[j+1]=num[j];
num[3]='-';
processedNumber.push_back(num);
}
int main(){
//ifstream in("test.txt");
//in>>caseNum;
cin>>caseNum;
string phoneNumber;
for(int i=0; i<caseNum; i++){
//in>>phoneNumber;
cin>>phoneNumber;
process(phoneNumber);
}
sort(processedNumber.begin(),processedNumber.end());
//copy(processedNumber.begin(),processedNumber.end(),ostream_iterator<string>(cout, "/n"));
string tmp=processedNumber[0];
int k=0;
memset(counter,0,sizeof(counter)); //对应的号码至少出现一次
for(size_t i=1; i<processedNumber.size() ;i++){
if( tmp == processedNumber[i]){ //只要出现相等的情况,就一定存在重复的电话号码
counter[k]++;
duplicate=true;
}
else{
tmp= processedNumber[i];
k++;
}
}
if(!duplicate){
cout<<"No duplicates."<<endl;
return 0;
}
vector<string>::iterator it=unique(processedNumber.begin(),processedNumber.end());
k=0;
for(vector<string>::iterator it1=processedNumber.begin() ; it1!=it ; it1++,k++){
if(counter[k]==0)
continue;
cout<<(*it1)<<" "<<counter[k]+1<<endl;
}
}
/*
12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279
310-1010 2
487-3279 4
888-4567 3
*/
- 487-3279 - PKU 1002
- 487-3279 - PKU 1002
- PKU 1002 487-3279
- pku 1002 487-3279
- PKU ACM 1002 487-3279
- pku oj 1002 487-3279
- PKU 1002 487-3279 问题的解决
- PKU ACM 1002 487-3279 C++实现
- PKU 1002
- pku 1002
- PKU-1002
- PKU 1002
- Pku acm 1002 487-3279 排序算法解题报告(一) ----二叉查找数(BST)
- POJ 1002求487-3279解题报告——【PKU ACM】
- PKU OJ 1002(487-3279)电话号码解题方法与个人最简短代码
- 二叉排序树求解pku 1002
- PKU 1002 感想
- pku 1002 解题报告
- 嵌入式Linux之我行——S3C2440上MMC/SD卡驱动实例开发讲解(一)[转]
- pku 1011 解题报告
- SSH_远程登录
- js鼠标事件大全
- 【转】C#索引器-索引器的定义
- pku 1002 487-3279
- 错误: AjaxControlToolkit requires ASP.NET Ajax 4.0 scripts. 解决方案
- Web 领域那些阴魂不散的产品,技术与思想
- HDU 1083(图论,二分匹配)
- Java相对路径读取文件
- 页面中声明方式定义的用户控件与页面事件的执行顺序
- 帮帮忙
- Eclipse RCP 系统任务栏
- 最后期限摘要