编程题:分苹果_同学分苹果的小学题

编程题:分苹果_同学分苹果的小学题题目描述n只奶牛坐在一排,每个奶牛拥有ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出-1。输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含一个整数n(1<=n<=100),接下来的一行包含n个整数ai(1&l…

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

Jetbrains全系列IDE稳定放心使用

题目描述

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

输入描述:

每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。

输出描述:

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

输入

复制

4
7 15 9 5

输出

复制

3

思路:

数学问题,依次判断即可。首先输入的是n个奶牛,然后输入一行每个奶牛的苹果数。
计算所有奶牛拥有的苹果总数,平均数。总数不能整除奶牛数则返回-1
依次判断每个奶牛拥有的苹果是否大于平均数,大于的判断超出的值是否能整除2,不能则返回-1
能则将超出的数加起来,除以2即为需要转移的次数

代码:

package net.stxy.one.controller;

/**
 * Created by ASUS on 2018/5/31
 *
 * @Authod Grey Wolf
 */


import java.util.Scanner;

public class Test2 {


    public static void main(String[] args) {
        Test2 test2 = new Test2();
        test2.sys1();

    }

    private void sys1() {
        Scanner scanner = new Scanner(System.in);
        int i, n = 0;
        //计算总数
        int sum = 0;
        //平均数
        int averg = 0;
        int[] arr;
        n = scanner.nextInt();
        arr = new int[n];

        for (i = 0; i < n; i++) {
            arr[i] = scanner.nextInt();
            sum += arr[i];
        }
        averg = sum / n;
        //超过的值
        int over = 0;
        //统计超出的总数
        int overSum = 0;
        for (i = 0; i < n; i++) {
            if (arr[i] > averg) {
                over = arr[i] - averg;
                //如果超过的值不能对2整除,无解,因为要每次移动2个苹果
                if (over % 2 != 0) {
                    System.out.println("-1");
                    return;
                } else {
                    //统计一共超过平均值的数量
                    overSum += over;
                }
            }
        }
        if (sum % n != 0) {
            System.out.println("-1");
        } else {
            //移动的次数就是超过平均值的总数整除每次移动的个数
            System.out.println(overSum / 2);
        }
    }

    

}

效果:

4
7 15 9 5
3

我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182886.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SWD应用接口

    SWD应用接口随着ARM公司对Cortex系列的推出,采样SWD方式调试成了大家的首选。SWD不仅速度可以与JTAG媲美,而且使用的调试线少得多。很多人在采样SWD方式进行调试时,一般都是采用4线:①VCC     –    电源②GND    –   地线③SWDIO-   数据④SWCLK-  时钟       在对NXP的LPC111

  • matlab语法 axis on,matlabaxis

    matlab语法 axis on,matlabaxis编程语言中文网今天精心准备的是《matlabaxis》,下面是详解!Matlab里axis这个函数怎么用,举个例子!axis函数可以用于操作普通的坐标属性(轴的缩放和外观)。比如:axis([xminxmaxyminymax]):可以设置当前坐标轴x轴和y轴的限制范围axis([xminxmaxyminymaxzminzmaxcmincmax])可以设置x,y…

  • DataReader存在的意义

    DataReader存在的意义

  • Linux中创建自己的MOTD[通俗易懂]

    Linux中创建自己的MOTD[通俗易懂]1)什么是MOTDmotd:是英文缩写messageoftheday。译文是:每日提示信息,问候报文。那你为什么要用MOTD?其实目的很简单,是提示进入系统的用户注意事项,或提示系统运行的概

  • JavaSE 编写第一个程序

    JavaSE 编写第一个程序文章目录第一篇语法入门说在前面的话前言内容介绍更新内容其他说明本书由来帮助说明急需求职致谢与勘误自序第3版自序第2版自序第1版自序第0版自序第一章JDK下载及准备工作1.1Java介绍1.1.1Java简介1.1.2Java技术体系1.1.3前后端的工作内容1.1.4Java语言特性1.1.5Java用途1.2JDK下载1.2.1JDK与JRE的区别1.2.2JDK下载与安装1.2.3卸载1.2.4禁止JDK检查更新1.3编写代码前的准备

  • poi系列(二):通过poi、poi-ooxml读取写出excel

    poi系列(二):通过poi、poi-ooxml读取写出excel(根据网上多篇文档实践整理加工,非原创也非转载)本类主要是读取后缀为xlsx或xls的excel操作。需要导入包&lt;dependency&gt;&lt;groupId&gt;org.apache.poi&lt;/groupId&gt;&lt;artifactId&gt;poi&lt;/artifactId&gt;…

发表回复

您的电子邮箱地址不会被公开。

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