题目描述 给你一个整数数组 a。现在让你进行一定数量的操作(可能为零),让数组的所有元素都相互相同(即 a1 = a2 = ⋯ = an). 在一次操作中,你可以选取任意数量的元素,将这些元素加 1. 例如:a = [4,2,1,6,2]. 你可以进行以下操作:选择元素 4、2 和 6,并将这些元素加 1 . 因此,在这次操作中,你可以获得数组的新状态。a = [5,3,1,7,2]. 为了使数组的所有元素彼此相等(即变为 a1 = a2 = ⋯ = an) 你需要进行至少多少次操作? 输入格式 输入的第一行包含单个整数 t (1 ≤ t ≤ 104) — 测试中测试用例的数量。 以下是输入测试用例的说明。 每个测试用例描述的第一行包含一个整数 n (1 ≤ n ≤ 50) — 数组长度. 每个测试用例描述的第二行包含 n 个整数 a1,a2,...,an (1 ≤ ai ≤ 109) — 数组的元素. 输出格式 对于每个测试用例,打印一个整数代表使数组的所有元素相等的最小操作数。用c语言代码输出
时间: 2024-02-09 14:10:51 浏览: 201
数组a中已存有互不相同的10个整数从键盘输入一个整数,找出与该值相同的数组元素下标。 (如果没找到,输出“没找到”).c
5星 · 资源好评率100%
以下是该题的 C 语言代码解答:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
int n;
scanf("%d", &n);
int a[n];
int sum = 0, min = 1e9;
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
sum += a[i];
if(a[i] < min)
min = a[i];
}
if((sum % n) != 0)
printf("-1\n");
else
{
int avg = sum / n, count = 0;
for(int i = 0; i < n; i++)
{
count += abs(avg - a[i]);
}
printf("%d\n", count / 2);
}
}
return 0;
}
```
注释如下:
1. 首先读入测试用例的数量`t`,并进入循环。
2. 读入数组长度`n`,以及数组的元素`a[i]`。
3. 计算数组元素之和`sum`和数组元素的最小值`min`。
4. 如果`sum`不能被`n`整除,则不存在解,输出`-1`。
5. 否则,计算平均值`avg`和每个元素到平均值的距离`count`。
6. 输出`count/2`,因为每次可以将多个元素加1,所以每个元素到达平均值的步数应该是它们到达平均值的距离的一半。
完整代码请参考上述代码。
阅读全文