• 把数组排成最小的数


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

    举例:输入数组{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;
    }

    运行界面如下:

  • 相关阅读:
    java将一个或者多个空格进行分割
    Oracle decode()函数
    javascript 匿名函数和模块化
    javascript Math函数
    javascript 数组Array排序
    jQuery 获取屏幕高度、宽度
    fastJson 转换日期格式
    QNX Development Tools Based on Eclipse IDE
    Eclipse equinox implementation of OSGi
    Eclipse SWT
  • 原文地址:https://www.cnblogs.com/venow/p/2665325.html
Copyright © 2020-2023  润新知