做商城网站可以个人备案,途牛旅游网,婚恋网站策划,芜湖市建设工程质量监督站官方网站数位排序
4653. 数位排序 - AcWing题库
题目大意#xff1a;输入两个数#xff0c;n,m。
将1~n的数#xff0c;按照以下规则排序#xff1a;
当两个数各个数位之和不同时#xff0c;将数位和较小的排在前面#xff0c;当数位之和相等时#xff0c;将数值小的排在…数位排序
4653. 数位排序 - AcWing题库
题目大意输入两个数n,m。
将1~n的数按照以下规则排序
当两个数各个数位之和不同时将数位和较小的排在前面当数位之和相等时将数值小的排在前面。
例如2022 排在 409前面因为 2022 的数位之和是 6小于 409 的数位之和 13。
又如6排在 2022 前面因为它们的数位之和相同而 6 小于 2022。
输入第出排序后的第m个数
思路
根据两个参数进行排序可以使用序偶pair pair 还被称之为“序偶”亦即它默认是可以比较的。它以 first 作为第一关键字second 为第二关键字。 当然也可以用结构体存储数和数位和自定义排序规则即可
#includeiostream
#includealgorithm
using namespace std;
const int N 1000010;
pairint ,int a[N];
int solve(int x){int sum 0;while(x){sum x%10;x x/10;}return sum;}
int main(){int m,n;cinmn;for(int i 1; i m; i ){a[i] {solve(i),i};}sort(a1,a1m);couta[n].secondendl;return 0;
}在编写代码时发现数组下标就可以代替第几位用数组存数位和。即用下标代表原数字数组存的数字代表数位和。
#includeiostream
#includealgorithm
using namespace std;
const int N 1e610;
int a[N],b[N];
bool cmp(int x,int y)
{if(b[x] ! b[y]) return b[x] b[y];else return x y;
}int main()
{int n,m;cinnm;for(int i 1; i n; i ){a[i] i;int x i;while(x){b[i] x%10;x / 10;}}sort(a1,a1n,cmp);couta[m]endl;return 0;
}