您的位置:首页 > 其它

POJ[1002]487-3279

2016-08-14 17:56 330 查看
如果相邻号码相同

次数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