//Very very poor technique.. there must be a better way.. import java.util.*; public class HipToBeSquare { public static boolean isSquared(int x, int y, ArrayList tried){ //System.out.printf("%d, %d%n", x, y); if (y == 0) return false; if (tried.contains(y)) return false; tried.add(y); if (x - y * y == 0){ return true; } int newNumber = (x - y * y); boolean worked = isSquared(newNumber, highestSquare(newNumber), tried); if (worked == false){ tried.remove(tried.indexOf(y)); return isSquared(x, y - 1, tried); } else{ return true; } } public static int highestSquare(int x){ for (int i = 1; i <= 100; i++){ if (x >= i * i) continue; else return i - 1; } return 0; } public static void main(String args[]){ Scanner reader = new Scanner(System.in); System.out.print("Enter a number: "); int number = reader.nextInt(); ArrayList tried = new ArrayList(); if(isSquared(number, highestSquare(number), tried)) System.out.println(tried); else System.out.println("Cool!"); } }