【发布时间】:2021-06-06 07:26:12
【问题描述】:
我正在解决一个问题,问题描述是:
给定一个数字 N。你必须执行两次交换操作 使数字尽可能大。
给你一个数字 N (10 ≤ N ≤ 2×109)。你必须准确地执行 两次交换操作。你可以选择任意两个不相等的位置 这个数字,然后交换这两个位置的数字。
例如,对于数字 451,您可以选择位置 1 和 2,然后交换这个 交换号码后再次将 541 您可以选择位置 2 和 3 并在交换数变为 514 后交换。
这两个操作后你能得到的最大数是多少?
所以我编写了一个有意义的代码,但我不明白为什么在我的代码swap() 中交换相同的字符。看代码你就明白了。
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t;
cin>>t;
while(t--){
string s;
cin>>s;
ll k=2;//Number of minimum swaps
for(int i=0;i<s.size();i++){
char ma=s[i];//storing maximum number
for(int j=i+1;j<s.size();j++){
if(ma < s[j]){
ma=s[j];
}
}
if(ma != s[i]){
swap(ma,s[i]);//swaping two chars if I found something bigger than s[i]. This line is also occuring error I mean unexpected behavior
k--;
}
cout<<"Iteration "<<i+1<<" "<<s<<endl;//This line is for inspecting what is going on
}
}
}
输入输出:
Input:
1
123
Output:
Iteration 1 323
Iteration 2 333
Iteration 3 333
如果您看到代码,则不应发生这种情况。
请说出swap 的情况。
【问题讨论】:
-
与您的问题无关,但是...如果您只需要打印结果,您可以对字符串进行排序吗?
-
@silverfox 我无法排序,因为我要交换数字的任意两位数
-
@fabian 抱歉,实际上我忘了编辑。我必须是
ma,这将被交换。但是如果我使用ma而不是c,那么结果也是出乎意料的。 -
你正在用一个局部变量交换一个字符串元素,但你应该交换两个字符串元素。例如,如果您将
s[0]存储在ma中,然后将ma与s[1]交换,您仍然有相同的值是s[0]。 (打印ma和s看看发生了什么。)