java分苹果_分苹果

import java.io.IOException;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class Main {

/**

*这个题目是求解最少的移动次数。细节上考虑,是要将一个奶牛身上的苹果转移到另一个奶牛身上,但是实际上求最小,并不需要一个一个的转移。

*奶牛拥有的少于平均多少个,除以二就是最少需要的次数。遍历所有的奶牛,计算少于平均的奶牛需要多少个就可以了,如果想省略判断是否少于平均,

*也是可以的,直接用奶牛拥有的苹果个数减去平均值,取绝对值除2就可以了,但是由于多的也计算,少的也计算,那么最后要将总的次数除以二。

*注意细节问题:

*一:如果总苹果sum( = a1 + a2 + .. + an)不能整除奶牛个数n,则无法平均,无解

*二:每次只能从一个奶牛上恰好拿2个到另一个奶牛,这个和数字运算有关,奇数和偶数减2仍然保持自身奇偶性,

*但是平均数只可能是奇数或者偶数中的一种,所以输入的每个数必须和平均数保持一致奇偶性,否则无解。

*/

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

boolean haveOdd = false;

boolean haveEven = false;

int sum = 0;

int avg = 0;

int numNo = Integer.parseInt(br.readLine().trim());

int[] arrNum = new int[numNo];

String[] arrInput = br.readLine().trim().split(" ");

int step = 0;

for (int i=0; i

arrNum[i] = Integer.parseInt(arrInput[i]);

sum += arrNum[i];

if (arrNum[i] % 2 == 0) {

haveEven = true;

} else {

haveOdd = true;

}

}

if (sum % numNo != 0) {//不能整除

System.out.println(-1);

return;

}

avg = sum /numNo;

if (((avg % 2 == 0) && haveOdd == true) || ((avg % 2 == 1) && haveEven == true)) {//判断每个数和avg的奇偶性是否一致

System.out.println(-1);

return;

}

for (int i=0; i

if (arrNum[i] < avg) {

step += (avg - arrNum[i]) >> 1;//除以2

}

}

System.out.println(step);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值