2024年蓝桥杯小白赛 数学魔术家【算法赛】 题型:模拟

56 阅读1分钟

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的情况:

image.png

#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;
}

image.png