算法提高 change

版权声明:lixiang666 https://blog.csdn.net/weixin_43838785/article/details/90138518

问题描述
  数组A中共有n个元素,初始全为0。你可以对数组进行两种操作:1、将数组中的一个元素加1;2、将数组中所有元素乘2。求将数组A从初始状态变为目标状态B所需要的最少操作数。
输入格式
  第一行一个正整数n表示数组中元素的个数

第二行n个正整数表示目标状态B中的元素
输出格式
  输出一行表示最少操作数
样例输入
2

7 8
样例输出
7
数据规模和约定
  n<=50,B[i]<=1000

#include<iostream>
#include<algorithm>
using namespace std;
int b[51],n,sum;
int judge()//判断b数组是否全为0;
{
	for(int i=1;i<=n;i++)
	if(b[i]!=0) return 1;
	return 0;
}
int main()
{
	int i;
	cin>>n;
	for(i=1;i<=n;i++)
	cin>>b[i];
	while(judge())
	{
		for(i=1;i<=n;i++)
		if(b[i]%2==0) continue;//如果是偶数就放过它。。。
		else 
		{
			b[i]--;//改造为偶数,并操作加1
			sum++;
		}
		if(judge())
		{
			for(i=1;i<=n;i++)
			b[i]/=2;
			sum++;
		}
		else break;
	}
	cout<<sum;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/90138518