Skip to content

Instantly share code, notes, and snippets.

@Aniruddha-Deb
Created November 6, 2020 09:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Aniruddha-Deb/30cdf10ad362eb5bfc5e1c3ae052bab3 to your computer and use it in GitHub Desktop.
Save Aniruddha-Deb/30cdf10ad362eb5bfc5e1c3ae052bab3 to your computer and use it in GitHub Desktop.
Greedy algorithm to solve operations required for answer
package com.sensei.algorithms.numeric;
import java.util.Scanner;
public class OpSolverGreedy {
public static final double EPSILON = 0.005;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a = sc.nextInt();
int A[] = new int[n];
for (int i=0; i<n; i++) {
A[i] = sc.nextInt();
}
char ops[] = new char[n-1];
double val = A[0];
double[] deltas = new double[4];
for (int i=1; i<n; i++) {
// Keys: 0 = add, 1 = sub, 2 = mul, 3 = div;
deltas[0] = Math.abs(val+A[i] - a);
deltas[1] = Math.abs(val-A[i] - a);
deltas[2] = Math.abs(val*A[i] - a);
if (A[i] != 0) deltas[3] = Math.abs(val/A[i] - a);
else deltas[3] = Double.MAX_VALUE;
// get min delta
int minDeltaIndex = 0;
for (int j=1; j<4; j++) {
if (deltas[j] < deltas[minDeltaIndex]) minDeltaIndex = j;
}
if (minDeltaIndex == 0) { val += A[i]; ops[i-1] = '+'; }
else if (minDeltaIndex == 1) { val -= A[i]; ops[i-1] = '-'; }
else if (minDeltaIndex == 2) { val *= A[i]; ops[i-1] = '*'; }
else { val /= A[i]; ops[i-1] = '/'; }
System.out.println("Best option at step " + i + " is " + ops[i-1]);
}
System.out.println("Ans is " + val);
for (int i=0; i<n; i++) {
System.out.print(A[i] + " ");
if (i != n-1) System.out.print(ops[i] + " ");
}
if (a-EPSILON <= val && a+EPSILON >= val) {
System.out.print("= " + a);
}
System.out.println();
sc.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment