问题标题: 酷町堂:3977

0
0
已解决
李宜和
李宜和
高级启示者
高级启示者

3977   小数排序

经验值:0 时间限制:1000毫秒

题目描述 Description

小明最近学习了很多的排序算法。老师想检验一下他的水平,给他出了一道题目:现在有n个小数(位数不超过10),需要将他们按照小数部分从大到小的顺序进行排列,如果小数部分相同的话,则再按照数值大小,从小到大排列。

输入描述 Input Description

第一行输入一个整数n(n<=20000)
第二行输入n个空格隔开的小数

输出描述 Output Description

输出一行,排序后的数据,空格隔开

样例输入 Sample Input

5 1.21 1.12 5.21 5.44 4.66

样例输出 Sample Output

4.66 5.44 1.21 5.21 1.12

 

 

求思路


1
已采纳
潘艺博
潘艺博
初级天翼
初级天翼

我AC了

思路:

定义整形n,实型a数组,大小为[20100],再定义bool型cmp,里面定义两个实型形参,如果(a-(int)(a))不等于(b-(int)(b)),返回(a-(int)(a))大于(b-(int)(b)),否则返回a<b//主函数外

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

输入n,循环输入a[i],输入数组后sort(a+1,a+1+n,cmp),最后输出a[i]即可AC//主函数内

望采纳~

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

@潘艺博 

核心

if(a==1&&c==12){ 
        cout<<364; 
        return 0; 
    } 
    if(a>c||((a==c)&&(b>d))){ \
        swap(a,c); swap(b,d); 
    } 
    while(a!=c||b!=d){
        sum++; 
        b++; 
        if(b>e[a]){
            b=1; 
            a++;
        } 
    }

 

0
张展嘉
张展嘉
新手天翼
新手天翼
#include<iostream>
#include<algorithm>
using namespace std;
int n;
string a[10005];
int count(string s){
    int cnt=0;
    for(int i=0;i<s.size();i++){
        if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'){
            cnt++;
        }
    }
    return cnt;
}
bool cmp(string a,string b){
    if(count(a)!=count(b)){
        return count(a)<count(b);
    }
    return a<b;
}
int main(){
    cin>>n;
    getline(cin,a[1]);
    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;
    }
}

 

另一题3983

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

这不和出门测最后一题差不多吗?

潘艺博在2021-08-13 08:40:12追加了内容

先占个位,别举报,我写完再来

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

函数核心

if(x-int(x)!=y-int(y)) return x-int(x)>y-int(y); else return x<y; }

主函数核心

for(int i=0;i<n;i++) cin>>a[i];

sort(a,a+n,cmp); for(int i=0;i<n;i++) cout<<a[i]<<' ';

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

核心(结构体):

bool cmp(double x,double y){
    if(x-(int)x!=y-(int)y){
        return x-(int)x>y-(int)y;
    }
    else
    return x<y;
}

 

我要回答