1 条题解

  • 0
    @ 2025-8-24 23:14:59

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 海洋守卫者
    不积跬步,无以至千里;不积小流,无以成江海。

    搬运于2025-08-24 23:14:59,当前版本为作者最后更新于2025-04-27 17:02:26,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    P12366 [蓝桥杯 2023 省 Python B] 数位排序

    解题思路

    将数字与数位和捆绑(使用结构体或元组)放入数组或列表,以数位和为关键字排序,最后输出第 mm 个数。

    完整代码

    C++:

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    const int MAXN=1e6+7;
    struct Node{
    	int id,num;
    }l[MAXN];
    int n,m,ans;
    inline int Count(int x)
    {
    	int sum=0;
    	while(x)sum+=x%10,x/=10;
    	return sum;
    }
    inline bool cmp(Node A,Node B)
    {
    	return A.num==B.num?A.id<B.id:A.num<B.num;
    }
    int main()
    {
    	scanf("%d %d",&n,&m);
    	for(int i=1;i<=n;i++)l[i]={i,Count(i)};
    	sort(l+1,l+1+n,cmp);
    	printf("%d",l[m].id);
    	return 0;
    }
    

    Python:

    def takeSecond(elem):
    	return elem[1]
    def count(x):
    	tmp,sum=x,0
    	while tmp>0:
    		sum+=tmp%10
    		tmp//=10
    	return sum
    l=[]
    n,m=int(input()),int(input())
    for i in range(n):
    	l.append((i+1,count(i+1)))
    l.sort(key=takeSecond)
    print(l[m-1][0])
    
    • 1

    信息

    ID
    12188
    时间
    2000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者