POJ[1002]487-3279

    xiaoxiao2025-04-30  14

    如果相邻号码相同 次数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,"-"); }
    转载请注明原文地址: https://ju.6miu.com/read-1298613.html
    最新回复(0)