5.数学魔术家【算法赛】 - 蓝桥云课 (lanqiao.cn)
升序排就是最大值,降序排就是最小值,如果降序排可能会出现首位为0的情况,如果碰见这种情况,那么我就先输出0后面的数(第二小),再输出0
#include<bits/stdc++.h>
using namespace std;
vector<int> v;
const int N = 1e5 + 10;
int flag1[N], flag2[N];
void solve(int x)
{
while (x)
{
v.push_back(x % 10);
x /= 10;
}
}
int main()
{
int x; cin >> x;
solve(x);
vector<int> maxn = v;
vector<int> minn = v;
sort(maxn.begin(), maxn.end(), greater<int>());
sort(minn.begin(), minn.end());
for (int i = 0; i < maxn.size(); i++)cout << maxn[i];
cout << " ";
for (int i = 0; i < minn.size(); i++)
{
if (i == 0)
{
if (minn[i] == 0)
{
cout<<minn[i+1]<<"0";
flag2[i + 1] = 1;
}
}
if (flag2[i] == 1 )
{
if (i == 0)
{
continue;
cout << minn[i];
}
}
else if(flag2[i+1]!=1)
cout<<minn[i];
}
return 0;
}#include<bits/stdc++.h>
using namespace std;
vector<int> v;
const int N = 1e5 + 10;
int flag1[N], flag2[N];
void solve(int x)
{
while (x)
{
v.push_back(x % 10);
x /= 10;
}
}
int main()
{
int x; cin >> x;
solve(x);
vector<int> maxn = v;
vector<int> minn = v;
sort(maxn.begin(), maxn.end(), greater<int>());
sort(minn.begin(), minn.end());
for (int i = 0; i < maxn.size(); i++)cout << maxn[i];
cout << " ";
for (int i = 0; i < minn.size(); i++)
{
if (i == 0)
{
if (minn[i] == 0)
{
cout<<minn[i+1]<<"0";
flag2[i + 1] = 1;
}
}
if (flag2[i] == 1 )
{
if (i == 0)
{
continue;
cout << minn[i];
}
}
else if(flag2[i+1]!=1)
cout<<minn[i];
}
return 0;
}
过不去,因为我只考虑了1个0的情况,但是没有考虑多个0的情况:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;cin>>s;
sort(s.begin(),s.end(),greater<int>());
cout<<s;
cout<<" ";
sort(s.begin(),s.end());
int cnt=0;
if(s[0]!='0') cout<<s;
else
{
for(int i=0;i<s.size();i++)
{
if(s[i]!='0')break;
cnt++;
}
cout<<s[cnt];
for(int i=1;i<=cnt;i++)cout<<"0";
for(int i=cnt+1;i<s.size();i++)cout<<s[i];
}
return 0;
}#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;cin>>s;
sort(s.begin(),s.end(),greater<int>());
cout<<s;
cout<<" ";
sort(s.begin(),s.end());
int cnt=0;
if(s[0]!='0') cout<<s;
else
{
for(int i=0;i<s.size();i++)
{
if(s[i]!='0')break;
cnt++;
}
cout<<s[cnt];
for(int i=1;i<=cnt;i++)cout<<"0";
for(int i=cnt+1;i<s.size();i++)cout<<s[i];
}
return 0;
}