java面试题csdn_java底层面试题

java面试题csdn_java底层面试题问题是:n只奶牛坐在一排,每个奶牛拥有ai个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出-1输出描述:输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。输入例子:471595输出例子:3im…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

问题是:n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1

输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。

输入例子:
4
7 15 9 5

输出例子:
3

import java.util.Scanner;

/** * 分苹果问题 * @author cc_小白成长 * */
public class TestApple{ 
   
    public static void main(String[] args) {
        //创建输入
        Scanner sc = new Scanner(System.in);
        //输入整数,
        int n =   sc.nextInt();
        //定义数组,存放输入数据
        int [] arr = new int[n];
        //用于计算所有数的和
        int num = 0;
        //循环输入,并计算输入数字的和
        for(int i = 0 ;i<n ;i++){
            arr[i] = sc.nextInt();
             num+=arr[i];
        }

        //第一次判断 输入的数是否能被整除
        if(num%n!=0){
  
  //能被整除才能实现,每人分的苹果一样
            System.out.println(-1);
            return;
        }
        //经过前面的判断,这里num/n必定是整数
        int avg = num/n;
        //num重置 你可以重新定义变量存结果
        num = 0;
        //循环计算结果
        for(int i = 0;i<n;i++){
            //这里是用户判断奇偶
            /* * 注意 重点1 如果avg是奇数则每人手上都应该是奇数(你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上) */
            if(avg%2!=arr[i]%2){
                //显然不满足条件
                System.out.println(-1);
                return;
            }
            // 用于计算结果
            /* 注意 重点2 我们只需要计算avg>arr[i]或者avg<arr[i]即可得到结果 */ 
             if((avg-arr[i])>0){
                 num += ( avg-arr[i])/2;//除2的目的是每次移动两个苹果
            }
        }
        System.out.println(num);
    }
}

测试
例1:
4
15 7 9 5
结果:3
例2:
92
2 76 20 6 20 10 18 34 44 2 14 30 4 84 16 4 20 10 60 10 40 4 4 54 10 40 40 4 30 8 10 4 4 12 28 20 20 40 4 10 12 10 6 6 12 2 18 28 4 32 2 18 8 54 56 10 18 12 20 18 50 24 30 58 42 62 28 16 6 12 22 8 34 8 14 6 78 4 8 28 6 4 20 4 52 2 28 26 38 64 10 16
结果: 354

需要注意两个重点,以及判断不满足条件的情况果断return;
欢迎交流学习

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183875.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • but六种用法_比较级的用法和句型

    but六种用法_比较级的用法和句型1.EXPLAIN简介使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。➤通过EXPLAIN,我们可以分析出以下结果:表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询➤使用方式如下:EXPLAIN+SQL语…

    2022年10月18日
    0
  • 面向过程

    面向过程现在前端技术不是几年前的前端那样,熟练掌握JavaScript、Jquery、Ajax、DOM操作、其他框架等等这些就够了。而随着业务的复杂等多种因素,如今前端有了面向对象的方式编程,如:TypeSc

    2022年8月2日
    3
  • vim查找指令

    vim查找指令一、vi查找:当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里可没有菜单-〉查找,不过没关系,你在命令模式下敲斜杆(/)这时在状态栏(也就是屏幕左下脚)就出现了“/”然后输入你要查找的关键字敲回车就可以了。如果你要继续查找此关键字,敲字符n就可以继续查找了。值得注意的是“/”是向下查找,而“?”是向上查找,而在键盘定义上“?”刚好是“/”的上档符。二、vi替换:vi/vim中可以使用:s命令来替换字符串以前只会使用一种格式来全文替换,今天发现该命令有很多种写法

    2022年6月29日
    47
  • DateTime格式大全

    DateTime格式大全

    2021年11月29日
    55
  • lte频谱带宽_lte信道带宽可以配置为

    lte频谱带宽_lte信道带宽可以配置为1.频带(Band)所谓频带,指代的是一个频率的范围或者频谱的宽度,即无线解码器的最低工作频率至最高工作频率之间的范围,单位是Hz。为了方便起见,在LTE中,使用数字1-43来表示不同的频带(36101-V10.21.0版本协议),从而指代不同的频率范围。协议36101规定了目前LTE所有的频带、该频带的频率范围和LTE制式,如下图所示。需要注意的是,频带1-32的上下行频率范围是不重叠的,即上行

    2022年10月11日
    1
  • MATLAB绘制三维地图「建议收藏」

    MATLAB绘制三维地图「建议收藏」1、meshgrid:生成格点矩阵,类似于给定坐标空间[x,y]=meshgrid(1:10);

    2022年10月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号