該題目是在線筆試時遇到的。題目的正式描述爲:給定一個全部由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;
}