大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
题目描述
i 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。
输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。
思路:
数学问题,依次判断即可。首先输入的是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账号...