Beh... effettivamente un modo c'è:
codice:
import java.io.*;

class P {
   public static void main(String [] args) throws Exception {
      BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
      String valore = br.readLine();
      boolean trovato = false;
      int tmp = 0;
      int a = Integer.parseInt(valore);
      int i = 0;
      while (!trovato && ((i*i) < a)) {
         tmp = a - (i*i);
         if (Math.sqrt(tmp) == (new Integer((int) Math.sqrt(tmp))).floatValue() ) {
            trovato = true;
         } else {
            i++;
         }
      }
      if (trovato) System.out.println("Si"); else System.out.println("No");
   }
}
L'idea è questa:
1) Trovo l'i-esimo quadrato;
2) Lo tolgo dal valore che devo testare
3) Controllo che questo sia un quadrato
4) Ciclo finchè i*i è minore del numero stesso!

Per risolvere il punto 3 basta controllare che la parte intera della radice quadrata sia uguale alla radice quadrata stessa:
|_radice(x)_| = radice(x).

In Java sembra che la condizione dell'if sia un obbrobrio, ma solamente perchè Java è ObjectOriented.


Ciao.