• 【贪心算法】最大整数


    题目:

    设有n个正整数,将它们连接成一排,组成一个最大的多位整数。

    例如:n=3时,3个整数13,312,343,连成的最大整数为34331213。

    又如:n=4时,4个整数7,13,4,246,连成的最大整数为7424613。


    输入:

    n

    输入n个数。

    输出:

    连成的多位数。

    思路:

    让这几个数排排序连接成最大的整数,所以应考虑,各个整数顺序,那么对这几个整数排序的准则是什么?

    准则:设两个整数是a,b,如果a+b大于b+a,那么a在b的前面,反之,b在a前面也就是局部的解

    全局的解就是所有整数的连接顺序,既然要用到连接所以用string。

    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    
    using namespace std;
    string str[3] = {""};
    
    string GetStrFromInt(int n)
    {
    stringstream ss;
    string s;
    ss << n;
    ss >> s;
    return s;
    }
    
    string GreedyAlgorithm(int n)
    {
    int arr[4] = { 0 };
    string strmax = "";
    cout << "Please Input the Data:" << endl;
    int m = n;
    while (m--)
    {
    if (!(cin >> arr[m]))
    {
    cout << "输入数据不合法" << endl;
    return NULL;
    }
    }
    
    
    //核心算法———将整数转为字符串,连接起来进行比较
    for (int i = 0; i < n; ++i)
    {
    str[i] = GetStrFromInt(arr[i]);
    }
    
    
    for (int i = 0; i < n; ++i)
    {
    for (int j = i + 1; j < n; ++j)
    {
    if ((str[i]+str[j]).compare(str[j] + str[i]) < 0)
    {
    string temp=str[i];
    str[i] = str[j];
    str[j] = temp;
    }
    }
    }
    for (int i = 0; i < n; ++i)
    {
    strmax += str[i];
    }
    return strmax;
    }
    
    
    int main()
    {
    int n;
    cout << "Please Input Datas:" << endl;
    if (cin >> n)
    cout << GreedyAlgorithm(n) << endl;
    else
    cout << "输入数据不合法" << endl;
    return 0;
    }

    C++知识点总结:

    ①将整数转成字符串:需要头文件#include <sstream>具体代码如下:

    string GetStrFromInt(int n)
    {
    stringstream ss;
    string s;
    ss << n;
    ss >> s;
    return s;
    }

    ②字符串连接:string 类型的变量可以直接用“+”,“+=”连接。

    ③字符串比较

    string 字符串可以直接用"<",">"直接比较。

    int strcmp(const char firststring[], const char secondstring);(字符逐个比较

    祝你早日攒够失望,然后开始新的生活。
  • 相关阅读:
    [leedcode 82] Remove Duplicates from Sorted List II
    [leedcode 83] Remove Duplicates from Sorted List
    [leedcode 81] Search in Rotated Sorted Array II
    [leedcode 80] Remove Duplicates from Sorted Array II
    [leedcode 79] Word Search
    2018 ICPC青岛-books(思维题)
    CodeForces 15A-Cottage Village(思维题)
    CodeForces 755A-PolandBall and Hypothesis(思维题)
    CodeForces
    UVA11624-Fire!(BFS)
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/6978265.html
Copyright © 2020-2023  润新知