问题标题: 酷町堂:4864 有趣的排序3

0
0

0
已采纳
王文博
王文博
缔造者之神
缔造者之神

给3个函数:

string tq(string s){
    string z;
    for(int i=0;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9') z=z+s[i];
    }
    return z;
} 
int sz(string z){
    int sum=0;
    for(int i=0;i<z.size();i++){
        if(z[i]>='0'&&z[i]<='9') 
         sum+=z[i]-'0';
    }
    return sum;
}
bool cmp(string x,string y){
    if(sz(x)!=sz(y)) return sz(x)>sz(y);
    else if(tq(x)!=tq(y)) return tq(x)<tq(y);
    return x<y;
}

望采纳!

0
李宜和
李宜和
高级启示者
高级启示者

@潘艺博 

for(int i=1;i<=n;i++) { 
cin>>a>>b>>c;
 sum=double(f(a+b,b,c)*f(a,b,b+c))/f(a,b,c); 
printf("%.2f\n",sum); 
}

核心

李宜和在2021-08-13 11:59:42追加了内容

f是函数

0
潘艺博
潘艺博
初级天翼
初级天翼

思路:

定义整形n,字符串数组s[10010],bool型cmp函数,在里面定义两个形参string a,string b,在函数里定义整形sa,sb(sb别想成**,这里是sumb的缩写,sa同理)和字符串sza,szb,遍历字符串a,判断a[i]是数字,sza+=a[i](组成数字串),sa+=a[i]-'0'(累加这个数字字符是几)(b字符串同理),如果sa不等于sb,返回sa大于sb,否则如果sza不等于szb,返回sza小于szb,否则返回a小于b//主函数内

----------------------------分---------------------------------------割----------------------------------------线---------------------------

输入n,getline(cin,s[0])(吃换行),循环读入getline(cin,s[i]),输入后在循环外使用sort排序,最后循环输出s[i]即可AC

望采纳~

0
0
李锦昊
李锦昊
中级天翼
中级天翼

我的贴在哪???

**明明采纳了???

为何没采纳?????

我的**标记为2,点进去就一条

@酷町侠 

 

 

0
孙浩轩
孙浩轩
中级守护
中级守护

int n; cin>>n; getline(cin,a[0]); for(int i=1;i<=n;i++){ getline(cin,a[i]); } sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++){ cout<<a[i]<<endl; }

 

 

0
朱小川
朱小川
缔造者
缔造者

函数核心

for(int i=0;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9') z=z+s[i];
    }
    return z;
    }
    int sz(string z){
        int sum=0;
        for(int i=0;i<z.size();i++){
            if(z[i]>='0'&&z[i]<='9')
                sum+=z[i]-'0';
 }
 return sum;
 }
 bool cmp(string x,string y){
 if(sz(x)!=sz(y)) return sz(x)>sz(y);
 else if(tq(x)!=tq(y)) return tq(x)<tq(y);
 return x<y;
}

 

主函数核心

for(int i=1;i<=n;i++){
        getline(cin,a[i]);
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
    cout<<a[i]<<endl;
    }

0
0
我要回答