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;
    }

    运行界面如下:

  • 相关阅读:
    数组的复制
    ==与equals()区别
    构造器与方法
    数据类型及类型转换
    java标识符与命名规则
    多线程 总结
    局部变量与成员变量
    Java反射机制
    java的动态代理机制详解
    USB设备描述符
  • 原文地址:https://www.cnblogs.com/venow/p/2665325.html
Copyright © 2011-2022 走看看