C++ “查找最大的三位数”;内;数
对于这个问题,我需要在较大的数字中找到最大的三位数 示例测试用例1: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转换为数组
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