Codeforces#82(Div. 2)A:Erasing Zeroes
程序员文章站
2022-06-01 23:29:04
...
题意:从01字符串中至少删几个0使得字符串内所有的1都连续?
思路:
1、分别从左边和右边遍历字符串“数组”,分别记录数到第一个1的0数量,再计算所有0的数量,作差即可求得1串中夹得0数量了。(这里用到flag标记是否全部为0,那么输出为0)
2、直接记录左边和右边第一个1所在得索引位置,然后在这两个位置之间遍历,记录中间得0即可。
两种思路其实是一致的,细节上有点不同,后者简洁一些,代码如下:
1
#include<bits/stdc++.h>
using namespace std;
int main()
{
bool flag;
int T,i,j,k,l;
string s;
cin>>T;//输入字符串的数量
for(i=0;i<T;i++)
{
bool flag=0;//记录是否全为0
int cnt0left=0,cnt0=0,cnt0right=0;//两侧的0及全部0数量
cin>>s;
j=0;
while(s[j]=='0')//左边的0
{
j++;
}
cnt0left=j;
cout<<"cnt0left="<<cnt0left<<endl;
k=s.length()-1;
while(s[k]=='0')//右边的0
{
k--;
cnt0right++;
}
//cout<<"cnt0right="<<cnt0right<<endl;
for(l=0;l<s.length();l++)//全部的0
{
if(s[l]=='0') cnt0++;
if(s[l]=='1') flag=1;//有1则不全为0
}
//cout<<"cnt0="<<cnt0<<endl;
//cout<<"flag="<<flag<<endl;
if(!flag)//全0
{
cout<<0<<endl;
}else{
cout<<cnt0-cnt0left-cnt0right<<endl;//不全0
}
}
return 0;
}
2
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T,i,post1,post2,l,cnt=0;
string s;
cin>>T;
for(i=0;i<T;i++)
{
cin>>s;
post1=0;
while(s[post1]=='0')
{
post1++;
}
post2=s.length()-1;
while(s[post2]=='0')
{
post2--;
}
for(l=post1;l<=post2;l++)
{
if(s[l]=='0')
{
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}
上一篇: 如何生成绝对唯一且不容易被猜测的推荐码