POJ[1002]487-3279
2016-08-14 17:56
330 查看
如果相邻号码相同
次数times前后累加
如果相邻号码不同
上一个号码次数不为1:输出
上一个号码次数为1:不输出
注意:以上逻辑总不会显示(输入的)最后一个重复号码,要单独判断
次数times前后累加
如果相邻号码不同
上一个号码次数不为1:输出
上一个号码次数为1:不输出
注意:以上逻辑总不会显示(输入的)最后一个重复号码,要单独判断
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; char arr[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'}; struct phoneNum { phoneNum(string str="",long time=1){ this->num=str; this->times=time; }; string num; long times; }; void handleStr(string& str); bool comp(const phoneNum& n1,const phoneNum& n2){ return n1.num<n2.num; } int main() { long n; cin>>n; std::vector<phoneNum> v(n); string str; for (int i = 0; i < n; ++i) { cin>>v[i].num; } for (int i=0;i<n;i++) { handleStr(v[i].num); } sort(v.begin(),v.end(),comp); bool have=0; for (int i=1;i<n;i++) { if (v[i].num==v[i-1].num) { have=1; v[i].times=v[i].times+v[i-1].times; } else if(v[i-1].times!=1){ cout<<v[i-1].num<<' '<<v[i-1].times<<endl; } } if (have!=1) { cout<<"No duplicates."<<endl; } // 如果所有数字都相同,以上逻辑有错 if (v[n-1].times!=1) { cout<<v[n-1].num<<" "<<v[n-1].times<<endl; } return 0; } void handleStr(string& str) { for (int i=0;i<str.size();i++) { if (str[i]=='-') { str.erase(i,1); i--; } else if(!('0'<=str[i]&&'9'>=str[i])){ str[i]=arr[int(str[i]-'A')]; } } str.insert(3,"-"); }
相关文章推荐
- POJ 1002 487-3279
- POJ 之 1002 :487-3279
- POJ 1002 487-3279
- (POJ 1002) 487-3279
- POJ1002 487-3279
- POJ-1002 487-3279(map)
- POJ 1002: 487-3279
- POJ1002 487-3279,电话号码转换
- 【POJ】1002 487-3279
- poj 1002-487-3279
- POJ 1002 487-3279(排序)
- POJ1002 487-3279 字符串 C语言
- POJ 1002 487-3279
- POJ 1002_487-3279
- Poj 1002 487-3279
- [POJ][1002]487-3279
- POJ 1002 487-3279
- poj 1002 487-3279
- POJ 1002 UVA 755 487--3279 电话排序 简单但不容易的水题
- poj 1002-487-3279