题目描述:给定一个正整数,给出消除重复数字以后最大的整数
输入描述:正整数,注意考虑长整数
输出描述:消除重复数字以后的最大整数
输入样例:423234
输出样例:432
方案:将输入的整数按照字符串str来处理,给定一个保存结果的字符串变量res,res初始值为str[0];
然后依次遍历str,在res中查找有无相同的对应的字符,若字符相同假定其在res中的位置为t;
则判断t+1位置上的字符是否大于t位置上的字符,若大于,则应将t位置上的字符移除,在res末尾加上该字符。
//=============消除重复的数字===============
int main(){
string str;
while (cin >> str){
string res;
res = str[0];
for (int i = 1; i < str.size(); i++){
if (res.find(str[i]) == string::npos){ //注意未找到时的判断条件
res += str[i];
}
else{
int t = res.find(str[i]);
if (res[t] < res[t + 1]){
res.erase(t, 1); //从t位置开始,移除1个字符
res += str[i];
}
}
}
cout << res << endl;
}
return 0;
}
总结:
string中find()、erase()函数的使用
参考博客:
https://blog.csdn.net/qq_33933704/article/details/79188028
string 在C++中的使用:https://blog.csdn.net/Wchenchen0/article/details/81042596
本文介绍了一种算法,用于从给定的正整数中去除重复的数字,生成一个不包含重复数字且数值最大的整数。通过字符串处理实现,利用find()和erase()函数遍历并检查每个数字,确保结果字符串中的每一个数字都是唯一的,并保持最大可能的数值。

1万+

被折叠的 条评论
为什么被折叠?



