LiuMing
unread,Jul 1, 2011, 12:56:39 PM7/1/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to ACM-CPC-MUST
The code is rough, so please you help me debuging it!
#include<stdio.h>
#include<stdlib.h>
double avg(double arr[], int n);
double exchange(double arr[],int n);
int main(int argc, char argv[])
{
int a=0;
double exchange_total = 0;
scanf("%d",&a);
//printf("input %d\n",a);
while(1)
{
double* f_arr = NULL;
f_arr = (double*)malloc(sizeof(double) * a);
for(int i=0;i < a; i++)
{
scanf("%lf\n",&(f_arr[i]));
//printf("f_arr[%d]:%lf\n",i,f_arr[i]);
}
exchange_total = exchange(f_arr, a);
printf("Total exchange: %lf \n",exchange_total);
free(f_arr);
scanf("%d\n",&a);
if( a == 0) break;
}
return 0;
}
double avg(double arr[], int n)
{
double sum = 0.0;
for(int i=0; i< n; i++)
sum+=arr[i];
printf("Sum: %lf\n",sum);
return sum/(double)n;
}
/*
double exchange(double arr[],int n)
{
double _exchange = 0;
double _avg = avg(arr,n);
//printf("Avg: %lf\n",_avg);
for(int i=0; i < n -1; i++)
{
for(int j = i+1; j < n; j++)
{if(arr[i] == _avg) break;
if((arr[i] + arr[j]) >= _avg * 2)
{
double temp=0.0;
if(arr[i] > arr[j])
{
temp = _avg - arr[j];//printf("j:%d exchanged:%lf
\n",j,_exchange);
arr[j] = _avg;
arr[i] = arr[i] - (_avg - arr[j]);
}
else if( arr[i] < arr[j])
{
temp = _avg - arr[i];//printf("j:%d exchanged:%lf
\n",j,_exchange);
arr[i] = _avg;
arr[j] = arr[j] - (_avg - arr[i]);
}
else
arr[i] = arr[j];
_exchange += temp;
}
}
}
//printf("Total exch: %lf\n",_exchange);
return _exchange;
}
*/
double exchange(double arr[],int n)
{
double pos =0;
double neg =0;
double diff=0;
double _avg=avg(arr,n);printf("Avg: %lf\n",_avg);
for(int i=0;i<n;i++)
{
diff = (double)(long)((arr[i] - _avg) * 100.0) / 100.0;
if(diff > 0)
pos += diff;
else
neg += diff;
}
if(-neg > pos)
return -neg;
else
return pos;
}