POJ[1002]487-3279

来源:互联网 发布:星星宠物 知乎 编辑:程序博客网 时间:2024/06/11 21:07
  • 如果相邻号码相同
    • 次数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,"-");}
0 0
原创粉丝点击