如图中,n堆高度不同的积木堆,想要让其高度一致,则需要移动高于平均值的积木放置在较低的积木堆上,求最少移动次数。
代码思路:
1. 统计积木总个数sum
2. 求出平均值average
3. 比较找出高于平均值的积木堆,得出其差值之和即可
(第三步中数值逐个进行比较,则需要数组或内存空间进行存放数据)
C版本:
#include<stdio.h>
#include<stdlib.h>
//想用绝对值方法解决问题,abs()需要用到的库文件
int main(){
int n,m;
while(scanf("%d\n",&n) == 1){
if(n==0){ break;}
//int nums[n];//创建数组或
int *nums = (int *)malloc(n* sizeof(int));
//函数内部动态分配内存:n个int型数据内存空间
int sum = 0;
for(int i=0;i<n;i++){
scanf("%d",&nums[i]);
sum += nums[i];
}
//统计积木总个数
int result = 0;
for(int j=0;j<n;j++){
if(nums[j]-(sum/n) > 0){//高于平均值的积木才需要移动
result += (nums[j]-(sum/n));
}
}
printf("%d\n\n",result);
free(nums);//释放内存空间
}
return 0;
}
C++版本:
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n,m;
while(cin>>n){
if(n==0){ break;}
vector<int> nums = vector<int>(n,0);
//函数内部动态分配内存:n个int型数据内存空间
int sum = 0;
for(int i=0;i<n;i++){
cin>>nums[i];
sum += nums[i];
}
//统计积木总个数
int result = 0;
for(int j=0;j<n;j++){
if(nums[j]-(sum/n) > 0){//高于平均值的积木才需要移动
result += (nums[j]-(sum/n));
}
}
cout<<result<<endl;
cout<<endl;
}
return 0;
}