n 个小朋友坐在一排,每个小朋友拥有 ai 个糖果,现在你要在他们之间转移糖果,使得最后所有小朋友拥有的糖果数都相同,每一次,你只能从一个小朋友身上拿走恰好两个糖果到另一个小朋友上,问最少需要移动多少次可以平分糖果,如果方案不存在输出 -1。
n 个小朋友坐在一排,每个小朋友拥有 ai 个糖果,现在你要在他们之间转移糖果,使得最后所有小朋友拥有的糖果数都相同,每一次,你只能从一个小朋友身上拿走恰好两个糖果到另一个小朋友上,问最少需要移动多少次可以平分糖果,如果方案不存在输出 -1。
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数n(1 <= n <= 100),接下来的一行包含n个整数ai(1 <= ai <= 100)。
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。
4 7 15 9 5
3
var n = readline();
n = Number(n);
var ai = readline().split(' ');
ai = ai.map(item => Number(item));
const total = ai.reduce((acc, current) => acc + current,0);
(function (arr,tot){
if (tot % n == 0){
console.log(count(arr,tot/n));
}else{
console.log(-1);
}
})(ai,total);
function count(arr,sta){
var sum = 0;
for (i in arr){
if (arr[i] > sta){
if((arr[i] - sta)%2 === 0){
sum += (arr[i] - sta)/2;
}else{
return sum = -1;
break;
}
}
}
return sum;
} n = int(input())
nums = list(map(int, input().split(' ')))
from collections import deque
def solution(n, nums):
t = 0
res = 0
for i in nums:
t += i
mean = t/n
nums.sort(reverse = 1)
nums = deque(nums)
while nums:
elem = nums.popleft()
while elem > mean:
if nums[-1] < mean:
if (mean-nums[-1])%2 == 0:
elem -= 2
nums[-1] += 2
res += 1
else:
return -1
elif nums[-1] == mean:
nums.pop()
if elem != mean: return -1
return res
print(solution(n,nums)) import java.util.*;
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
while(in.hasNextInt()){
int n=in.nextInt();
int []a=new int[n];
int sum=0;
for(int i=0;i<n;i++){
a[i]=in.nextInt();
sum+=a[i];
}
int avg=sum/n;
int sum1=0;//记录超过avg多少
for(int i=0;i<n;i++){
int temp=Math.abs(avg-a[i]);
if(temp%2!=0){
System.out.println(-1);
return ;
}
if(a[i]>avg)sum1+=temp;
}
System.out.println(sum1/2);
}
}
} #include <iostream>
#include <vector>
#include <cmath>
#include <climits>
using namespace std;
int main()
{
cin.tie();
ios::sync_with_stdio(false);
int n;
cin >> n;
vector<int> input;
int sum = 0;
for (int i = 0; i < n; i++) {
int now;
cin >> now;
sum += now;
input.push_back(now);
}
if (sum % n != 0) {
cout << -1 << endl;
return 0;
}
sum /= n;
int res = 0;
for (int i = 0; i < n; i++) {
int now = input[i];
if (abs(sum - now) % 2 != 0) {
cout << -1 << endl;
return 0;
} else {
if (sum - now > 0) {
res += (sum - now) / 2;
}
}
}
cout << res << endl;
return 0;
} //
// Created by yuanhao on 2020-1-7.
//
#include <iostream>
#include <cmath>
using namespace std;
//n 个小朋友坐在一排,每个小朋友拥有 ai 个糖果,现在你要在他们之间转移糖果,使得最后所有小朋友拥有的糖果数都相同,每一次,你只能从一个小朋友身上拿走恰好两个糖果到另一个小朋友上,问最少需要移动多少次可以平分糖果,如果方案不存在输出 -1。
//
//
//输入描述:
//每个输入包含一个测试用例。每个测试用例的第一行包含一个整数n(1 <= n <= 100),接下来的一行包含n个整数ai(1 <= ai <= 100)。
//
//
//输出描述:
//输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。
//示例1
//输入
//4
//7 15 9 5
//输出
//3
int main() {
int n = 0;
cin >> n;
int *candy = new int[n];
int sum = 0;
for (int i = 0; i < n; ++i) {
cin >> candy[i];
sum += candy[i];
}
if (sum % n != 0) {
cout << -1 << endl;
delete[] candy;
return 0;
}
int average = sum / n;
int times = 0;
for (int i = 0; i < n; ++i) {
int d = abs(candy[i] - average);
if (d % 2 != 0) {
cout << -1 << endl;
delete[] candy;
return 0;
}
times += d / 2;
}
cout << times / 2 << endl;
delete[] candy;
return 0;
} n = int(input()) read_list = list(map(int, input().split())) ava = sum(read_list)/n count = 0 for num in read_list: if ava % 2 != 0 and num % 2 == 0: count = -1 break elif ava % 2 == 0 and num % 2 != 0: count = -1 break if num > ava: #如果上述条件都不满足,则必存在解 while num != ava: num -= 2 count += 1 print(count)AC的Python解,很简单明了
n=int(input()) s=list(map(int,input().split())) if sum(s)%n!=0: print(-1) else: k=sum(s)/n s1=[(c-k)%2 for c in s] if(sum(s1)!=0): print(-1) else: s2=[c-k for c in s] s3= [c for c in s2 if c > 0] ##取正数,只取负数也一样 print(int(sum(s3)/2))
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] strArr = br.readLine().split(" ");
int[] arr = new int[n];
int total = 0;
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(strArr[i]);
total += arr[i];
}
int avg = total / n;
int count = 0;
for(int num: arr){
if((avg % 2 != 0 && num % 2 == 0) || (avg % 2 == 0 && num % 2 != 0)){
count = -1; // 由于是两个一拿,平均值和每个人的糖果数必须奇偶性相同,否则无解
break;
}
while(num > avg){
// 将糖多的孩子的糖果分出去
num -= 2;
count += 1;
}
}
System.out.println(count);
}
} while True: try: n=int(input()) ls=list(map(int,input().split())) summ=sum(ls) if summ%n==0 and sum(abs(a-summ/n)%2==0 for a in ls)==n: print(int(sum(abs((a-summ/n)/2) for a in ls)/2)) else: print(-1) except: break
import sys n = int(sys.stdin.readline().strip()) candy = [int(i) for i in sys.stdin.readline().strip().split()] total = sum(candy) if total % n != 0: print(-1) else: goal = int(total / n) arr = [i-goal for i in candy] if not all([i%2==0 for i in arr]): print(-1) else: neg = [-i for i in arr if i < 0] count = [i/2 for i in neg] count = sum(count) print(int(count))
//Java实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
//小朋友人数
int n = sc.nextInt();
int[] nums = new int[n];
int sum = 0;
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
sum += nums[i];
}
System.out.println(candy(nums, n, sum));
}
}
public static int candy(int[] nums, int n, int sum) {
int res = 0;
if (n == 1) return 0;
if (sum % n != 0) {
return -1;
}
int ave = sum / n;
for (int i = 0; i < n; i++) {
if (Math.abs(nums[i] - ave) % 2 == 1)
return -1;
if (nums[i] > ave) {
res += (nums[i] - ave) / 2;
}
}
return res;
}
}
def main(input_1, input_2):
n = int(input_1) # 获取第一个输入,有几个小朋友
ai_list = [int(i) for i in input_2.split(" ")] # 获取第二个输入,变成一个列表,代表每个小朋友手上的糖果数
mean = sum(ai_list) / n # 平均值
delta = [i-mean for i in ai_list] # 每个小朋友手上的糖果数减去平均值
if sum(delta) != 0: # 如果不能平分的话 返回 -1
return -1
temp = list(filter(lambda x:x>0, delta)) # 过滤掉那些负数
if sum(temp) % 2 == 1: # 正数字之和如果不能被 2 整除的话,那么不能够平分
return -1
else:
return int(sum(temp)/2)
if __name__ == '__main__':
input_1 = input()
input_2 = input()
print(main(input_1, input_2))