5371:【202112二级】按照个位数排序(2)
描述
对于给定的正整数序列,按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序。
输入
第一行1个整数n,表示序列的大小。( 0
第二行n个正整数,表示序列的每个数,每个数不大于100000000。
输出
输出按照题目要求排序后的序列
输入样例 1
6
17 23 9 13 88 10
输出样例1
10 13 23 17 88 9
#include
using namespace std;
struct num{
int a;
int g;
}s[100];
bool cmp(num a,num b){
if(a.greturn a.g;
if(a.g>b.g)
return b.g;
if(a.a>b.a)
return b.a;
return a.a;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i].a;
s[i].g=s[i].a%10;
}
sort(s+1,s+1+n,cmp);
for(int i=1;i<=n;i++){
cout<" ";
}
return 0;
}
这是代码,到底哪里错了,不能按条件输出。
比较函数cmp()那里的返回值错了,然后数组的大小修改下即可,修改如下:
参考链接:
#include<bits/stdc++.h>
using namespace std;
struct num{
int a; // 输入的数本身
int g; //输入的数的个位数
}s[1001];
// https://baike.baidu.com/item/sort%E5%87%BD%E6%95%B0/11042699?fr=aladdin
bool cmp(num a,num b){
if(a.g>b.g)
return false;
if(a.g<b.g)
return true;
if(a.a>b.a)
return false;
return true;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i].a;
s[i].g=s[i].a%10;
}
sort(s+1,s+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<s[i].a<<" ";
}
return 0;
}