关于#c++#的问题:5371:【202112二级】按照个位数排序(2)描述对于给定的正整数序列,按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序

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

img