反转0,但应该使得到的1数量最大

    xiaoxiao2025-03-19  29

    该题目是在线笔试时遇到的。题目的正式描述为:给定一个全部由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; }

     

    最新回复(0)