该题目是在线笔试时遇到的。题目的正式描述为:给定一个全部由0和1组成的字符串,并可以把0变换成1,但变换的次数最多为sec次,求经过变换后连续1的最大个数。
#include<iostream>
#include<string.h>
using namespace std;
int find(int *num, int start, int end)
{
int count = 0;
for(int iter = start; iter <= end; iter++)
{
if(num[iter]==0)
count++;
}
return count;
}
int main()
{
int fir,sec;
cin>>fir>>sec;
int num[fir];
for(int iter = 0; iter < fir; iter++)
cin>>num[iter];
int max_length = sec;
int now_len = 0;
int tag;
for(int it = sec-1; it < fir; it++)
{
int length = sec;//每处都设长度为sec
now_len = find(num,it+1-sec,it);//找到该区间内的0的个数;
tag = it;//上次结束的标记
it++;//从下一个开始
do
{
if(num[it] == 0)//保证0的个数小于sec时,可以有最后一次的调整。
now_len++;
length++;
it++;
}
while(now_len < sec && it < fir); //在最后一个0处截止,保证now_len达到最大
do
{
if(num[it]==1)
length++;
else
break;
it++;
}
while(it<fir); //0后继续查找连续的1
it = tag;//求出可能的长度后,还原到原位置;
if (length > max_length)
max_length = length;
}
cout<<max_length;
return 0;
}