The Trip

0 views
Skip to first unread message

LiuMing

unread,
Jul 1, 2011, 12:36:12 PM7/1/11
to ACM-CPC-MUST
Does any body have finished this problem?

LiuMing

unread,
Jul 1, 2011, 12:56:39 PM7/1/11
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;
}
Reply all
Reply to author
Forward
0 new messages