题解 | #分苹果#
分苹果
http://www.nowcoder.com/practice/a174820de48147d489f64103af152709
全是暴力,没有技巧
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int nums[n];
for(int i=0; i<n; i++)
{
scanf("%d", &nums[i]);
}
int sum = 0;
for(int i=0; i<n; i++)
{
sum += nums[i];
}
//tag标记,是否有输出-1的情况;count计数
int tag = 0;
int count = 0;
//如果sum不能被n整除则说明无法平分
if(sum%n != 0)
{
printf("%d\n", -1);
tag = 1;
}
else
{
int average = sum/n;
//遍历数组,只记录苹果比较少的情况
for(int i=0; i<n; i++)
{
if(nums[i] < average)
{
//因为每次只能取2个,如果缺少的苹果不能被2整除,说明无法平分
if((average - nums[i])%2 != 0 )
{
printf("%d\n", -1);
tag = 1;
break;
}
else
{
count = count + (average-nums[i])/2;
}
}
else if(nums[i] > average)
{
if((nums[i] - average)%2 != 0)
{
printf("%d\n", -1);
tag = 1;
break;
}
}
}
if(tag == 0) printf("%d\n", count);
}
return 0;
}