Beh... effettivamente un modo c'è:
L'idea è questa: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"); } }
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.![]()


Rispondi quotando