zoukankan      html  css  js  c++  java
  • 把数组排成最小的数

    题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。

    举例:输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。

    答:算法如下,证明略。

    答:

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    //把int转化为string
    string int2str(int i) 
    {
        string s;
        stringstream ss(s);
        ss << i;
        return ss.str();
    }
    
    int cmp(const void *one,const void *two)
    {
        string strone = *(string*)one;
        string strtwo= *(string*)two;
        string stronetwo = strone + strtwo;
        string strtwoone = strtwo + strone;
        return stronetwo > strtwoone;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int arr[] = {323, 324, 777, 432, 876, 565, 9, 228};
        int length = sizeof(arr)/sizeof(arr[0]);
        string *str = new string[length];
        for (int i = 0; i < length; i++)
        {
            str[i] = int2str(arr[i]);
        }
    
        qsort(str, length, sizeof(str[0]), cmp);
        for (int i = 0; i < length; i++)
        {
            cout<<str[i];
        }
        delete [] str;
    
        cout<<endl;
        return 0;
    }

    运行界面如下:

  • 相关阅读:
    typescript-定义静态类型和对象类型
    typescript-全局安装
    Cube-ui的使用
    mobx-react
    Calatan Number
    快速排序
    Boyer-Moore
    优先级队列
    PointNet环境搭建
    h5py库
  • 原文地址:https://www.cnblogs.com/venow/p/2665325.html
Copyright © 2011-2022 走看看