关注
void maxNumber(const vector<int> &;v, int num)
{
vector<int> arr, ans;
int minChoose=10, maxChoose=0;
bool exist[10];
for(int x:v)
{
exist[x]= true;
minChoose = min(minChoose, x); //可选择的最小值
maxChoose = max(maxChoose, x); //可选择的最大值
}
while(num) //将num每一位存到数组
{
arr.push_back(num%10);
num /= 10;
}
reverse(arr.begin(), arr.end());
//答案应尽可能和num位数相同,若位数相同无解,则答案减少一位且每位取最大值,如100 {2,3,4}的答案为44
for(int i=0;i<arr.size();i++)
{
//待选择的后一位大于等于可选数字的最小值时,当前为才可以选等值,否则只能选小于的值
int j = (i == arr.size() - 1 || arr[i + 1] >= minChoose ? arr[i] : arr[i] - 1);
while (j >= 0 &;&; !exist[j])
j--;
if(j<0) //同位数无解,退而求次降低解的位数
{
ans.clear();
for (int k = 0; k < arr.size() - 1; ++k)
ans.push_back(maxChoose);
break;
}
else if(j!=arr[i]) //当前位取了小于原数同位的值,则解确定,后面每一位都可以取最大值
{
ans.push_back(j);
while (ans.size()<arr.size())
ans.push_back(maxChoose);
break;
}
ans.push_back(j);
}
for(auto &;x:ans)
cout<<x;
cout << endl;
}
查看原帖
1 评论
相关推荐
点赞 评论 收藏
分享
2024-12-31 12:49
北京理工大学 机械结构工程师 点赞 评论 收藏
分享
牛客热帖
正在热议
# 职场高情商速成班 #
1139次浏览 38人参与
# 机械制造薪资爆料 #
1144395次浏览 9387人参与
# 被同事甩锅了怎么办 #
13299次浏览 88人参与
# 我的简历长这样 #
2076441次浏览 28121人参与
# 如何一边实习一边秋招 #
1094865次浏览 13429人参与
# 牛客帮帮团来啦!有问必答 #
2500249次浏览 25133人参与
# lastday知无不言 #
30013次浏览 269人参与
# 上班苦还是上学苦呢? #
189152次浏览 1132人参与
# 今年形式下双非本找得到工作吗 #
71454次浏览 650人参与
# 实习好累,可以辞职全力准备秋招吗 #
55245次浏览 743人参与
# 数据人的面试交流地 #
484146次浏览 8209人参与
# 现在前端的就业环境真的很差吗 #
124754次浏览 1575人参与
# 投递实习岗位前的准备 #
1287089次浏览 19332人参与
# 我的实习求职记录 #
6485595次浏览 86157人参与
# 当你面对裁员会如何? #
80601次浏览 804人参与
# 测测你的职业性格 #
25691次浏览 256人参与
# 你们的毕业论文什么进度了 #
847468次浏览 8510人参与
# 无实习如何秋招上岸 #
855231次浏览 9611人参与
# 工作中,你有没有遇到非常爱骂人的领导? #
9224次浏览 93人参与
# 不给转正的实习,你还去吗 #
1651639次浏览 18172人参与