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

编程题:分苹果_同学分苹果的小学题题目描述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

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

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

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

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


相关推荐

  • Java 随机数

    Java 随机数本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。广义上讲,Java中的随机数的有三种产生方式:(01).通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。(02).通过Math.random()返回一个0到1之间的double值。(03).通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。…

    2022年7月26日
    5
  • kettle工具使用教程_iphone实用配置工具问题

    kettle工具使用教程_iphone实用配置工具问题kettle工具的使用

    2022年10月9日
    4
  • C++中深入理解dynamic_cast

    C++中深入理解dynamic_cast转载:https://blog.csdn.net/gaojing303504/article/details/78860773dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成

    2022年7月4日
    23
  • 关于gsync 和 freesync[通俗易懂]

    关于gsync 和 freesync[通俗易懂]最近我的很多朋友都在问我怎么开启gsync以及gsync的作用还有些小伙伴的台式机有freesync我就随便说下要是有不对的希望各位大佬指正首先我们先了解下垂直同步:1、什么是垂直同步?普通情况下显卡是逐行扫描到显示器,这就导致前面一帧还没扫完下一帧就上去了,因此会产生撕裂,垂直同步则是让显卡去适应显示器,即显示器每次刷新的时候显卡再把算好的图像传给显示器。…

    2022年5月1日
    407
  • Android定时器Timer简单使用「建议收藏」

    Android定时器Timer简单使用「建议收藏」Android定时器Timer简单使用Timer简介Timer使用总结Timer简介Timer(计时器)位于java.util包下,可用于创建定时任务,任务可以安排为一次性执行,也可以定期重复执行。每个计时器对象对应一个后台线程(TimerThread)。简单理解为创建Timer对象,对应TimerThread线程循环开始从TaskQueue队列中执行一个TimerTask任务。Timer使用创建Timer对象vartimer=Timer()添加需要执行的任务//创建计

    2022年7月25日
    13
  • SA-SSD训练过程出现nan

    SA-SSD训练过程出现nan

    2020年11月8日
    220

发表回复

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

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