文章

2

粉丝

83

获赞

5

访问

1.2k

头像
整数排序 题解:
推荐阅读
P1905 华东师范大学2022年机试
发布于2024年1月31日 11:50
阅读数 603

c++题解

思路:平常排序我们使用sort()函数进行。但标准sort()函数只能满足由小到大排序,不能符合题目条件。

其实sort()函数可以传入3个参数,分别数组首地址,尾地址,以及比较函数。例如

int a[10];
sort(a,a+10,cmp)

此时cmp函数为自定义比较条件。我们只需写出符合题目的cmp函数即可。注意,cmp函数为bool类型。

bool cmp(int a,int b){
    int n1 = 1;int n2 = 1;
    //记录a,b两个数的位数,例如10的位数是2,0的位数是1. 因数字0无法作为log10()函数的参数,故设初始值为1
    if(a != 0) n1 = int(log10(abs(a)))+1;
    if(b != 0) n2 = int(log10(abs(b)))+1;
    //统计a,b位数
    if(n1 == n2) return a < b;//若ab位数相同则返回a与b大小比值,例如10与11,因10<11则返回true
    else return n1 > n2;//若ab位数不同,位数大的数反而小,则返回n1与n2比值。
}

再加上循环,即可完成该题。以下为题解

#include "bits/stdc++.h"
#include "string"

using namespace std;
const int N = 1000000;
int a[N] = {0};
bool cmp(int a,int b){
    int n1 = 1;int n2 = 1;
    if(a != 0) n1 = int(log10(abs(a)))+1;
    if(b != 0) n2 = int(log10(abs(b)))+1;
    if(n1 == n2) return a < b;
    else return n1 > n2;
}
int main(){
    int n;int number = 0;//number为数字个数
    while(cin>>n){
        a[number...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发