zoukankan      html  css  js  c++  java
  • 蓝桥杯 算法提高 change

    资源限制

    时间限制: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;
    }
  • 相关阅读:
    js克隆
    一些笔试题
    js的严谨模式
    Docker之Compose服务编排
    最近5年183个Java面试问题列表及答案[最全]
    Rancher概述
    迭代器和生成器
    Prometheus 安装
    Prometheus 介绍
    装饰器函数
  • 原文地址:https://www.cnblogs.com/lusiqi/p/12547532.html
Copyright © 2011-2022 走看看