文章
2
粉丝
83
获赞
5
访问
1.3k
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...
登录后发布评论
暂无评论,来抢沙发