按照个位数排序
描述
对于给定的正整数序列,按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序。
输入
第一行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错误?
【以下回答由 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
,重载小于运算符,达到了按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序的目的。
你可以尝试运行修正后的代码,看看是否满足题目要求并通过测试。如果还有其他问题,请随时向我提问。
【相关推荐】