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
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

