/home/toolbox/public_html/solutions/101/10137/b.c
1 #include <stdio.h>
2
3 #define TRUE (1 == 1)
4 #define FALSE (1 != 1)
5
6 int getInput(int * numStudents, long int money[], long int *total)
7 {
8 // BEGIN FUNCTION getInput
9 int i;
10 double m;
11 int rc = 0;
12
13 scanf("%d ", numStudents);
14 if(0 < *numStudents)
15 {
16 *total = 0;
17 rc = 1;
18 for(i = 0; i < *numStudents; i++)
19 {
20 scanf("%lf ", &m);
21 money[i] = (long int)((m * 100) + 0.5);
22 *total += money[i];
23 }
24 }
25 return(rc);
26 } // END FUNCTION getInput
27
28 void process(long int total, int numStudents, long int money[])
29 {
30 // BEGIN FUNCTION process
31 long int avg;
32 int leftover;
33 int i;
34 int under =0;
35 int over =0;
36 int over1 =0;
37 int fudge;
38 int numOvers = 0;
39 int magic;
40 int avg1;
41
42 avg = total / numStudents;
43 leftover = total - (avg * numStudents);
44 avg1 = (numStudents > (2 * leftover)) ? avg : avg + 1;
45 for (i =0; i< numStudents; i++)
46 {
47 printf("%d ",money[i]);
48 if (money[i] < avg)
49 {
50 under += avg - money[i];
51 }
52 else if (money[i] > avg)
53 {
54 numOvers++;
55 over += money[i] - avg;
56 over1 += money[i] - avg1;
57 }
58 }
59 magic = (avg != avg1) ? over1 : under;
60 fudge = (leftover > numOvers) ? over - numOvers : over - leftover;
61 printf("\n under [%d] ", under);
62 printf(" over [%d]", over);
63 printf(" fudge [%d] ", fudge);
64 printf(" magic [%d] \n", magic);
65
66 } // END FUNCTION process
67
68 int main ()
69 {
70 // main
71 int moreToDo;
72 long int money[1000];
73 long int total;
74 int numStudents;
75
76 //init();
77 moreToDo = getInput(&numStudents, money, &total);
78 while (moreToDo)
79 {
80 // while
81 printf("\n numStudents [%d] ", numStudents);
82 printf(" total [%ld]\n", total);
83 process(total, numStudents, money);
84 moreToDo = getInput(&numStudents, money, &total);
85 } // while
86
87 return 1;
88 } // main
89