2 条题解

  • 0
    @ 2023-12-24 19:52:16

    此题唯一难在排序。由于数的个数不超过 50005000,可以使用冒泡排序,排序函数如下:

    bool cmp(string a,string b,int Alen,int Blen){
    	if(Alen!=Blen)return Alen>Blen;//先比较整数部分长度
    	int len=min(a.size(),b.size());
    	for(int i=0;i<len;i++){
    		if(a[i]>b[i])return 1;//大于
    		if(a[i]<b[i])return 0;//小于
    		if(a[i]==b[i])continue;
    	}
    	return a.size()>b.size();//全部相同比较长度
    }
    void bubble(){//冒泡排序
    	for(int i=1;i<cnt;i++){
    		for(int j=i+1;j<=cnt;j++){
    			if(cmp(num[i].num,num[j].num,num[i].INTlen,num[j].INTlen))
    				swap(num[i],num[j]);
    		}
    	}
    }
    

    对数的处理:

    for(int i=0;i<s.size();i++){
    	if(isdigit(s[i])){
    		num[cnt].num+=s[i];
    		if(f==0)num[cnt].INTlen++;//有了小数点不再计入整数部分长度
    	}
    	else if(s[i]=='.')num[cnt].num+=s[i],f=1;//已有小数点
    	else if(isdigit(s[i-1]))num[cnt].ALLlen=num[cnt].num.size(),cnt++,f=0;//总长度,是否小数点有变量 f 恢复
    }
    

    综合代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int cnt=1;
    string s;
    bool f;
    struct node{
    	int ALLlen,INTlen;
    	string num;
    }num[10005];
    bool cmp(string a,string b,int Alen,int Blen){
    	if(Alen!=Blen)return Alen>Blen;
    	int len=min(a.size(),b.size());
    	for(int i=0;i<len;i++){
    		if(a[i]>b[i])return 1;
    		if(a[i]<b[i])return 0;
    		if(a[i]==b[i])continue;
    	}
    	return a.size()>b.size();
    }
    void bubble(){
    	for(int i=1;i<cnt;i++){
    		for(int j=i+1;j<=cnt;j++){
    			if(cmp(num[i].num,num[j].num,num[i].INTlen,num[j].INTlen))
    				swap(num[i],num[j]);
    		}
    	}
    }
    int main(){
    	ios::sync_with_stdio(false);
    	cin.tie(0),cout.tie(0);
    	getline(cin,s);
    	for(int i=0;i<s.size();i++){
    		if(isdigit(s[i])){
    			num[cnt].num+=s[i];
    			if(f==0)num[cnt].INTlen++;
    		}
    		else if(s[i]=='.')num[cnt].num+=s[i],f=1;
    		else if(isdigit(s[i-1]))num[cnt].ALLlen=num[cnt].num.size(),cnt++,f=0;
    	}
    	bubble();
    	cout<<num[cnt].num;
    	return 0;
    }
    

    已 AC,请放心

    信息

    ID
    460
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    40
    已通过
    24
    上传者