Java code, as requested

Shweta Jain has requested that I post my Java code. It is, essentially, the same as the C / C++ code posted earlier, with new instead of malloc and Arrays.sort instead of qsort.
import java.io.*;    
import java.util.Arrays;
import java.util.Scanner;

public class tg_ex_9
{
//Assume following return types while writing the code for this question.
public static int[] output1;

public static void BalanceCapability(int policeCount, int stationCount,
int[] policeCapability)
{
//Write code here
int smalli;
int countMax = (policeCount + stationCount - 1) / stationCount;
int remainder = policeCount % stationCount;
int i, j;
short[] count = new short[stationCount];
output1 = new int[stationCount];

if(stationCount == 1) {
j = 0;
for(i=0; i<policeCount; i++) {
j += policeCapability[i];
}
output1[0] = j;
return;
}

Arrays.sort(policeCapability);
reverse(policeCapability);
Arrays.fill(output1, 0);

for(i=0; i<stationCount; ++i) {
output1[i] = policeCapability[i];
count[i] = 1;
}

while(i < policeCount) {
smalli = -1;
for(j=0; j<stationCount; ++j) {
if(count[j] < countMax && (smalli == -1 ||
output1[j] < output1[smalli])) {
smalli = j;
}
}

output1[smalli] += policeCapability[i++];
++count[smalli];
if(count[smalli] == countMax) {
--remainder;
if(remainder==0)
countMax--;
}
}

Arrays.sort(output1);
reverse(output1);
}

private static void reverse(int[] arr) {
int last = arr.length - 1;
int halfLen = arr.length / 2;
int t;
for(int i=0; i<halfLen; i++) {
t = arr[i];
arr[i] = arr[last-i];
arr[last-i] = t;
}
}

public static void main(String[] argv) {
int policeCount;
int stationCount;
int i;

Scanner s = null;
try {
s = new Scanner(new FileInputStream(argv[0]));
} catch(Exception e) {
e.printStackTrace();
return;
}

while(s.hasNext()) {
System.out.println("------------------------------------");
policeCount = s.nextInt();
int[] policeCapability = new int[policeCount];
stationCount = s.nextInt();
//output1 = new int[stationCount];

System.out.println(policeCount + " " + stationCount);
for(i=0; i<policeCount; i++) {
policeCapability[i] = s.nextInt();
System.out.print(policeCapability[i] + " ");
}
System.out.println();
s.nextLine();
BalanceCapability(policeCount, stationCount, policeCapability);

System.out.print("Result: ");
for(i=0; i<stationCount; i++)
System.out.print(output1[i] + " ");
System.out.println();
}
}
}

No comments:

Post a Comment