牛客真题(29)-数字游戏

本文解析了一道牛客网的编程题目,要求输入一系列整数,然后对每个数的各位数字进行排序重组,形成可能的最大新数。通过C++和Python代码示例,展示了如何遍历数字、拆分并排序位数、去除前导零并重新组合的过程。

今天继续刷牛客真题,输入n个数,对每个数的各个位进行排序组合成新的数,并输出新的数中最大的数。

分析:
1、输入
2、遍历每个数,同时将数的每位存入数组中;
3、对数组按从小到大排序;
4、除去前面的0后,组合成新的数;
5、输出新数的最大的那一个;

问题:
1、排序中,C++使用sort函数,对于数组是sort(a,a+n),对于向量是sort(vector.begin(),vector.end());
2、对于Python中,使用t=sorted(t);

附上C++代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
        cin>>a[i];
    int max_num=0;
    for(int i=0;i<n;i++)
    {
        vector<int> temp;
        while(a[i]!=0)
        {
            temp.push_back(a[i]%10);
            a[i]/=10;
        }
        sort(temp.begin(),temp.end());
        int s=0;
        for(int j=0;j<temp.size();j++)
        {
            if(temp[j]!=0)
                s=s*10+temp[j];
        }
        max_num=max(max_num,s);
    }
    cout<<max_num<<endl;
    return 0;
}

附上Python代码:

n=int(input())
A=list(map(int,input().split()))
re=0
for a in A:
    li=[]
    while a!=0:
        li.append(a%10)
        a=a//10
    li=sorted(li)
    s=0
    for i in li:
        if i!=0:
            s=s*10+i
    re=max(re,s)
print(re)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值