C++训练1

网站:https://app.codility.com/programmers/lessons/1-iterations/binary_gap/

题目:


程序:

#include<iostream>
#include<vector>
using namespace std;

int solution(int N) {
if(N>0){
	unsigned length=0;//0的个数计数
	int n=N;
	vector<int> v;//保存二进制,例如n=11,二进制为1011,v为1101(也就是说v的begin为低位,end为高位,刚好倒置)
	vector<int> length_v;//保存0的长度,最后返回容器中的最大值;(容器也可能最后为空,例如二进制为1111时)
	while (n>0) 
	{
		if(n%2 ==1)
			v.push_back(1);
		else
			v.push_back(0);
		n=n/2;
	}
	auto it=v.end()-1;
	/*	//输出二进制;
	
	cout<<"输出二进制数:";
	while (it != v.begin()) 
	{
	cout<<*it<<" ";
	it--;
	}
	cout << *v.begin() << "  ";
	cout<<endl;
	*/
	//数0的个数
	it=v.begin();
	int flag=0;//flag=1时代表开始数0;
	length = 0;
	while (it != v.end())
	{
	if (*it == 1)
	{
		if(flag==0)
			flag=1;
		else if(flag==1){
			if(length!=0)
			length_v.push_back(length);
			length=0;}
	}
	else if(*it==0 && flag==1)
		length++;
	it++;
	}
	//输出0最大的长度
	if(length_v.empty()) return 0;//
	it=length_v.begin();
	int max=*it;
	while (it != length_v.end()) {
	if (*it>max)
	max=*it;
	cout<<"长度等于="<<*it<<endl;
	it++;
	}
	return max;
	}
else
 return 0;
}

void main()
{	
	cout<<"max="<<solution(15)<<endl;

	getchar();

}

猜你喜欢

转载自blog.csdn.net/weixin_37058227/article/details/79336157