版权声明:欢迎大佬批评指正!O(∩_∩)O https://blog.csdn.net/wyh1618/article/details/82784916
3295: 最小二进制数
题目描述
如果字符串由“0”和“1”组成并且没有前导零,则可以将此字符串称为正确的
以下是一些示例:“0”,“10”,“1001”。
给你一个正确的字符串s,您可以对此字符串执行两种不同的操作:
1. 交换任何一对相邻字符(例如,“1 01” “1 10”);
2. 将“11”替换为“1”(例如,“11 0” “1 0”)。
设val(s)是一个数字,s是它的二进制表示。
正确的字符串a小于其他正确的字符串b if (val(a)< val(b))。
您的任务是找到可以使用上述操作从给定字符串中获取的最小正确字符串。您可以按任何顺序多次使用这些操作(甚至根本不使用任何操作)。
输入
第一行为一个整数 n (1<=n <= 100)。
第二行为一个长度为n且只包含0或1的字符串s, 保证字符串s是正确的。
输出
输出一个您可以从给定字符串中获取的最小正确字符串。
样例输入
4
1001
样例输出
100
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
char s[999];
int n,m,i,j,k;
int c0=0,c1=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>s[i];
if(s[i]=='0')
c0++;
else
c1++;
}
if(c1==0)
cout<<0;
else
{
cout<<1;
for(i=0;i<c0;i++)
{
cout<<0;
}
}
return 0;
}