zoukankan      html  css  js  c++  java
  • 构造最大数

    /*
    题目:给定只包含正整数的数组,给出一个方法,将数组中的数拼接起来,得到的数是最大的。
    例如[4,94,9,14,1]拼接之后所得的最大数为:9944141
    */
    #include <iostream>
    #include <assert.h>
    using namespace std;
    void swap(int *a, int *b)
    {
         int tmp = *a;
         *a = *b;
         *b = tmp;
    }
    int get_digit(int x)//得到数x的位数,个位返回1,十位返回2,以此类推
    {
         int n = 0;
         while(x % 10)
         {
              ++n;
              x /= 10;
         }
         return n;
    }
    int pow(int n, int base)//求base的n次幂
    {
         int res = 1;
         for (int i = 0; i < n; ++i)
         {
              res *= base;
         }
         return res;
    }
    int get_new_num(int lhs, int rhs)//利用lhs和rhs构造一个新数,其中lhs在高位,rhs在低位
    {
         int n = get_digit(rhs);
         int res = lhs * pow(n, 10) + rhs;
         return res;
    }
    void get_max_num(int *array, int len)//得到构造的最大数,改变原数组内的元素次序
    {
         assert(NULL != array);
         int tmp, left_num, right_num;
         bool is_changed = true;
         while(is_changed)//循环直到遍历一轮数组后数组没有任何改变为止,此时数组顺序存储了构造的最大数的各个位上的数
         {
              is_changed = false;
              for(int i = 0; i != len-1; ++i)
              {
                   left_num = get_new_num(array[i], array[i+1]);//left_num = array[i]array[i+1]
                   right_num = get_new_num(array[i+1], array[i]);//right_num = array[i+1]array[i]
                   if(left_num < right_num)//如果新构造的数left_num小于right_num,则将数组右边的数和数组左边的数交换
                   {
                        swap(&array[i], &array[i+1]);
                        is_changed = true;
                   }
              }
         }
    }
    int main(int argc, char const *argv[])
    {
         int array[] = {4, 94, 9, 14, 1};
         int len = 5;
         get_max_num(array, len);
         cout<<"The max number is ";
         for(int i = 0; i != len; ++i)
              cout<<array[i];
         cout<<endl;
         return 0;
    }
    

      

  • 相关阅读:
    MySQL字符集 utf8 和 utf8mb4 区别及排序规则 general_ci 和 unicode_ci 和 bin 的区别
    tp5定时任务
    PHP7.X连接SQLSERVER数据库(CENTOS7)
    php 连接sqlserver
    接口踩坑:Status (blocked:other)
    php 一些常用函数
    tp5支付宝和微信支付
    php 数组相关方法的一些实际妙用
    MySQL如何利用索引优化ORDER BY排序语
    composer命令介绍之install和update及其区别
  • 原文地址:https://www.cnblogs.com/zxh1210603696/p/3201643.html
Copyright © 2011-2022 走看看