这两道是同一道题,只是区别在输出格式。

  算出需要移动的方块个数(相差平均数的总个数)即可,需要注意的是每两个输出之间有一个空行。

  2088就比较套路,最后一组输出没有空行。

hdu1326

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#define N 55
int a[N];
using namespace std;
int main()
{
int n,flag=0,ave,sum;
while(scanf("%d",&n)&&n) {
ave=0,sum=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
ave+=a[i];
}
ave/=n;
for(int i=1;i<=n;i++) {
if(a[i]<ave) {
sum+=ave-a[i];
}
}
printf("Set #%d\n",++flag);
printf("The minimum number of moves is %d.\n\n",sum);
}
return 0;
}

hdu 2088

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#define N 55
int a[N];
using namespace std;
int main()
{
int n,ave,sum,flag=0;
while(scanf("%d",&n)&&n) {
ave=0,sum=0;
if(flag++) printf("\n");
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
ave+=a[i];
}
ave/=n;
for(int i=1;i<=n;i++) {
if(a[i]<ave) {
sum+=ave-a[i];
}
}
printf("%d\n",sum);
}
return 0;
}