关于#c++#的问题:对于给定的正整数序列,按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序

按照个位数排序
描述

对于给定的正整数序列,按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序。

输入
第一行1个整数n,表示序列的大小。 ( 0<n <=1000)第二行n个正整数,表示列的每个数,每个数不大于100000000.

输出
按照题目要求排序后的序列 .

输入样例 1

6
17 23 9 13 88 10
输出样例 1

10 13 23 17 88 9
语言:
C++
这是我的代码,我自己测的时候是对的,但不知道为什么过不了?
求各位帅哥美女AI们修改


#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    long long a[n],b[n];
    for(int i=0;i<n;i++){
        cin>>a[i];
        b[i]=a[i]%10;    
    }
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(b[i]>b[j]){
                swap(b[i],b[j]);
                swap(a[i],a[j]);
            }else if(b[i]==b[j]){
                if(a[i]>a[j]){
                    swap(a[i],a[j]);
                }
            }
        }
    }
    for(int i=0;i<n;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; 
// 自定义比较函数
bool compare(int a, int b) {
    if (a % 10 == b % 10) {
        return a < b;
    }
    return a % 10 < b % 10;
}

int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }
    sort(nums.begin(), nums.end(), compare);
    for (int i = 0; i < n; i++) {
        cout << nums[i] << " ";
    }
    return 0;
}

是不是输出的时候最后多了一个空格
提示什么错误,是格式错误么?还是部分case错误?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

【以下回答由 GPT 生成】

我可以看出代码中的问题。问题出在排序算法上。目前使用的是冒泡排序方法,时间复杂度较高。而且,对于相等的情况,只考虑了个位数相等的情况,但忽略了个位数不相等时的排序规则。

以下是修正后的代码:

#include <iostream>
#include <algorithm>
using namespace std;

// 定义结构体表示每个元素
struct Number {
    long long value; // 正整数的值
    int digit; // 个位数
};

// 重载小于运算符,用于排序
bool operator<(const Number& n1, const Number& n2){
    if (n1.digit == n2.digit) {
        return n1.value < n2.value;
    } else {
        return n1.digit < n2.digit;
    }
}

int main(){
    int n;
    cin >> n;

    Number numbers[n];
    for(int i=0; i<n; i++){
        cin >> numbers[i].value;
        numbers[i].digit = numbers[i].value % 10;
    }

    sort(numbers, numbers + n);

    for(int i=0; i<n; i++){
        cout << numbers[i].value << " ";
    }
    return 0;
}

修正后的代码使用了std::sort算法进行排序,同时通过定义结构体Number,重载小于运算符,达到了按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序的目的。

你可以尝试运行修正后的代码,看看是否满足题目要求并通过测试。如果还有其他问题,请随时向我提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^