C++ “查找最大的三位数”;内;数

C++ “查找最大的三位数”;内;数,c++,algorithm,search,C++,Algorithm,Search,对于这个问题,我需要在较大的数字中找到最大的三位数 示例测试用例1:534535输出:535 示例测试用例2:2345788976输出:976 我尝试了以下代码: #包括 使用名称空间std; int main(){ int-num; cin>>num; int len=to_字符串(num).length(); int arr[10],lnum=0,max=0; 对于(int i=len-1;i>=0;i--) { arr[i]=num%10; num=num/10;//将int转换为数组

对于这个问题,我需要在较大的数字中找到最大的三位数

示例测试用例1:
534535
输出:
535

示例测试用例2:
2345788976
输出:
976


我尝试了以下代码:
#包括
使用名称空间std;
int main(){
int-num;
cin>>num;
int len=to_字符串(num).length();
int arr[10],lnum=0,max=0;
对于(int i=len-1;i>=0;i--)
{
arr[i]=num%10;
num=num/10;//将int转换为数组
}
对于(int i=0;iarr[i+1])
lnum=arr[i]*100+arr[i+1]*10+arr[i];
如果(lnum>最大值)
max=lnum;
}

请阅读注释以理解以下代码:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间boost::hana;
使用名称空间范围;
使用名称空间范围::视图;
auto constexpr is9=partial(std::等于{},9);
模板
射程乐趣(射程常数和r){
如果(r.size()==3){//3位数字?
返回r;//这是结果
}否则,如果(r | take(3)的全部为9)){//999?
return r | take(3);//没有比这个更好的了!
}否则{//否则?
auto tail=r | drop(1);//放下第一个以获得尾部
如果(r.front()

数字被视为一个字符串,因为我们需要比较长度为3的(子)字符串,所以字典
操作符阅读注释以理解以下代码:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间boost::hana;
使用名称空间范围;
使用名称空间范围::视图;
auto constexpr is9=partial(std::等于{},9);
模板
射程乐趣(射程常数和r){
如果(r.size()==3){//3位数字?
返回r;//这是结果
}否则,如果(r | take(3)的全部为9)){//999?
return r | take(3);//没有比这个更好的了!
}否则{//否则?
auto tail=r | drop(1);//放下第一个以获得尾部
如果(r.front()
数字被视为一个字符串,因为我们需要比较长度为3的(子)字符串,所以字典
运算符
包括
#包括
使用名称空间std;
int main(){
inti,n;
字符串s;
cin>>s;
n=(int)s.size();
如果(n
#包括
#包括
使用名称空间std;
int main(){
inti,n;
字符串s;
cin>>s;
n=(int)s.size();

如果(n此方法适用于任何可以存储在变量中的大数字。方法如下:

首先将数字转换为字符串,然后创建一个包含所有可能的3位数字的数组,如下所示

编号=
534535

所有可能的3位数字数组=
[“534”、“345”、“453”、“535”]

然后对该数组进行排序,排序后的最后一个元素将是三位数的最大值,如下所示,
排序数组=[“345”、“453”、“534”、“535”
]

另一个例子,
数字=
234578976

所有可能的3位数字数组=
[“234”、“345”、“457”、“578”、“788”、“888”、“889”、“897”、“976”]

排序后,最后一个元素是最大数量,如下所示
排序数组=[“234”、“345”、“457”、“578”、“788”、“888”、“889”、“897”、“976”
]

注意
基数排序
std::sort()
性能更好,
std::sort()
提供了
快速排序
。基数排序非常适合字符串排序,特别是在这种情况下,因为最大存储桶大小只有10(可能的范围为0-9),但您必须自己实现
基数排序

#include <iostream>

#include <vector>
#include <string>
#include <algorithm>

using std::cout;

std::vector<std::string> allThreeDigitNumbers(const std::string& numStr){

    std::vector<std::string> allNumStr(numStr.size() - 2, std::string("000"));
    std::vector<std::string>::iterator aIt = allNumStr.begin();

    for(std::string::const_iterator it = numStr.cbegin(), lastIt = it + (numStr.size() - 2); lastIt != it; ++it, ++aIt){

        std::copy(it, it + 3, aIt->begin());
    }

    return allNumStr;
}

unsigned maxThreeDigitNumberInNumber(unsigned long long num){

    std::string numStr = std::to_string(num);

    if(numStr.size() < 3){

        return 0;
    }

    std::vector<std::string> allNumStr = allThreeDigitNumbers(numStr);

    std::sort(allNumStr.begin(), allNumStr.end());

    return std::stoul(allNumStr.back());
}

int main(){
    cout<< "Max 3 digits number of 534535 => "<< maxThreeDigitNumberInNumber(534535)<< '\n';
    cout<< "max 3 digits number of 23457888976 => "<< maxThreeDigitNumberInNumber(23457888976)<< '\n';
}

这种方法适用于任何可以存储在变量中的大数字。方法如下:

首先将数字转换为字符串,然后创建一个包含所有可能的3位数字的数组,如下所示

编号=
534535

所有可能的3位数字数组=
[“534”、“345”、“453”
#include <iostream>

#include <vector>
#include <string>
#include <algorithm>

using std::cout;

std::vector<std::string> allThreeDigitNumbers(const std::string& numStr){

    std::vector<std::string> allNumStr(numStr.size() - 2, std::string("000"));
    std::vector<std::string>::iterator aIt = allNumStr.begin();

    for(std::string::const_iterator it = numStr.cbegin(), lastIt = it + (numStr.size() - 2); lastIt != it; ++it, ++aIt){

        std::copy(it, it + 3, aIt->begin());
    }

    return allNumStr;
}

unsigned maxThreeDigitNumberInNumber(unsigned long long num){

    std::string numStr = std::to_string(num);

    if(numStr.size() < 3){

        return 0;
    }

    std::vector<std::string> allNumStr = allThreeDigitNumbers(numStr);

    std::sort(allNumStr.begin(), allNumStr.end());

    return std::stoul(allNumStr.back());
}

int main(){
    cout<< "Max 3 digits number of 534535 => "<< maxThreeDigitNumberInNumber(534535)<< '\n';
    cout<< "max 3 digits number of 23457888976 => "<< maxThreeDigitNumberInNumber(23457888976)<< '\n';
}
Max 3 digits number of 534535 => 535
max 3 digits number of 23457888976 => 976