输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤50),代表柱子的个数。
第二行包含n个正整数h,表示每根柱子的高度。
对应每组数据,输出一个整数,表示需要搬的最小次数。
6 5 2 4 1 7 5
5
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); int[] arr = new int[n]; int sum = 0; for (int i = 0; i < n; i ++ ) { arr[i] = sc.nextInt(); sum += arr[i]; } int avg = sum / n; int count = 0; for (int i = 0; i < arr.length; i ++ ) { if(arr[i] < avg) count += avg - arr[i]; } System.out.println(count); } } }
#include <stdio.h> int main() { int n; while(scanf("%d", &n) != EOF) { int height[50] = {0}; int average, sum = 0, cnt = 0; for(int i = 0; i < n; ++i) { scanf("%d", &height[i]); sum += height[i]; } average = sum / n; for(int i = 0; i < n; ++i) if(height[i] > average) cnt += height[i] - average; printf("%d\n", cnt); } return 0; }
#include<stdio.h> #define N 50 int main() { int n; int num[N]; while(scanf("%d",&n)!=EOF && n!=0) { int sum = 0; int avg = 0; for(int i=0;i<n;i++) { scanf("%d",&num[i]); sum+=num[i]; } avg = sum/n; int step = 0; for(int i=0;i<n;i++) { if(num[i]-avg>0) { step+=num[i]-avg; } } printf("%d\n",step); } return 0; }
只有是平均数才会一样高,所以就先求出它的平均数,比如2和8的平均数是5,只需移动3次就够了,所以应该把它们的差值的绝对值都加起来除以2。 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 [] arr = new int [N]; int sum = 0; for (int x = 0; x < N; x++){ arr[x] = sc.nextInt(); sum += arr[x]; } int ave = sum / N; int count = 0; for (int x = 0; x < N; x++){ count += Math.abs(ave-arr[x]); } System.out.println(count /2); } sc.close(); } }