测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A40892. 数位排序本题总分:15 分【问题描述】小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。例如,2022 排在 409 前面,因为 2022 的数位之和是 6,小于 409 的数位之和 13。又如,6 排在 2022 前面,因为它们的数位之和相同,而 6 小于 2022。给定正整数 n,m,请问对…

填空题 较难

题目描述

数位排序

本题总分:15 分

【问题描述】

小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当

两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,

将数值小的排在前面。

例如,2022 排在 409 前面,因为 2022 的数位之和是 6,小于 409 的数位

之和 13。

又如,6 排在 2022 前面,因为它们的数位之和相同,而 6 小于 2022。

给定正整数 n,m,请问对 1 到 n 采用这种方法排序时,排在第 m 个的元

素是多少?

【输入格式】

输入第一行包含一个正整数 n。

第二行包含一个正整数 m。

【输出格式】

输出一行包含一个整数,表示答案。

【样例输入】

13

5

【样例输出】

3

参考答案

#include <bits/stdc++.h> using namespace std; struct ST{ int value; short shuwei; }arr[1000010]; bool cmp(struct ST a,struct ST b) { if(a.shuwei==-1) { a.shuwei=0; a.shuwei += a.value/1000000; a.shuwei += a.value%1000000/100000; a.shuwei += a.value%100000 /10000; a.shuwei += a.value%10000 /1000; a.shuwei += a.value%1000 /100; a.shuwei += a.value%100 /10; a.shuwei += a.value%10; arr[a.value].shuwei = a.shuwei; } if(b.shuwei==-1) { b.shuwei=0; b.shuwei += b.value/1000000; b.shuwei += b.value%1000000/100000; b.shuwei += b.value%100000 /10000; b.shuwei += b.value%10000 /1000; b.shuwei += b.value%1000 /100; b.shuwei += b.value%100 /10; b.shuwei += b.value%10; arr[b.value].shuwei = b.shuwei; } if(a.shuwei != b.shuwei) return a.shuwei<b.shuwei; else return a.value<b.value; } int main() { int i,j,n,m; scanf("%d",&n); scanf("%d",&m); for(i=1;i<=n;i++) { arr[i].shuwei=-1; arr[i].value = i; } sort(arr+1,arr+n+1,cmp); //for(i=1;i<=n;i++) // printf("shuwei:%hd value:%d\n",arr[i].shuwei,arr[i].value); printf("%d",arr[m].value); return 0; }
上一题 下一题