首页 > 编程语言 > 详细

蓝桥杯 算法提高 change

时间:2020-03-22 19:18:26      阅读:55      评论:0      收藏:0      [点我收藏+]

资源限制

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

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

7 8
样例输出
7
数据规模和约定
  n<=50,B[i]<=1000
 
总结:
逆向思维,把题目转化为b数组经过变化之后变成a数组
 
代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int b[51];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        scanf("%d",&b[i]);
    int ans=0;
    while(1){
        for(int i=1;i<=n;i++){
            if(b[i]%2){
                ans++;
                b[i]--;
            }
        } 
        int cnt = 0;
        for(int i=1;i<=n;i++){
            if(b[i]==0)
                cnt++;
        }
        if(cnt==n)
            break;
        for(int i=1;i<=n;i++){
            b[i]/=2;
            
        }
        ans++;
    }
    cout<<ans<<endl;   
    return 0;
}

 

蓝桥杯 算法提高 change

原文:https://www.cnblogs.com/lusiqi/p/12547532.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!