这是最后一片排序文章,上篇题解如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
sort(s.begin(),s.end());
reverse(s.begin(),s.end());
cout<<"Max:"<<s<<endl;
reverse(s.begin(),s.end());
int c=0;
while(s[c]=='0')
{
c++;
}
swap(s[0],s[c]);
cout<<"Min:"<<s<<endl;
return 0;
}
如上:首先先输入字符串S,从小到大排序,从大到小排序(也就是反转字符串s)
但如果给了0 0 5 4 9这几个数字排序后变为00459,不是一个五位数
所以用while循环找到非零数,所以如果用for循环找到后就可以直接break
但为了确保正确,尽量用while循环
所以for循环的方法如下:
for(int i=0;i<a.size();i++)
{
if(a[i]!=0)
{
c++;
break;
}
}
c++应该改为c=i;
因为我们已经排序好了,所以找到的一定是最小的
最后交换一下顺序 swap(s[0],s[c])
练习如下:
https://www.topscoding.com/p/2497https://www.topscoding.com/p/2497https://www.topscoding.com/p/3648https://www.topscoding.com/p/3648其实这是一种基础算法,与贪心,博弈论,递归等一样