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;
    }
  • 相关阅读:
    分布式锁设计方案
    ACID/CAP/BASE 理论知识
    分布式ID设计方案
    perl代码调试
    文档型数据库设计模式-如何存储树形数据 [转]
    树形结构的数据库表Schema设计
    http协议相关
    HTTPS加密原理(转)
    VBA读写XML文件
    VBA 刷新数据透视表
  • 原文地址:https://www.cnblogs.com/lusiqi/p/12547532.html
Copyright © 2011-2022 走看看