java j8 problem
7 09 2007/*
* J8. Pentru 3
Categories : Java, Programming
/*
* J2. Sa se determine toate descompunerile unui numar natural
* n > 0 in suma de termeni distincti ai sirului lui Fibonacci
*/
import java.io.*;
import java.util.Scanner;
import java.util.Vector;
import java.util.List; // pt a folosi doar metodele noi de adaugare/accesare elem vector
import static java.lang.System.*;
class j2 {
//private static Scanner intrareTastatura = null; // stream de citire de la tastatura
private static Scanner intrareFisier = null; // stream de citire din fisier
private static PrintWriter iesireFisier = null; // stream de scriere in fisire
private static int n = -1; // nr citit din fisier
private static int nrSol = 0; // nr de solutii LONG dc le las pe toate... si nu le ordonez...
private static int[] fib;
private static int[] convLaIntPrimitiv (Integer[] t)
{
int[] a = new int[t.length];
for (int i = 0; i n) return false;
return true;
}
private static boolean sol (int[] x, int k)
{
int sumaTotala = 0;
for (int i = 0; i -1) // cat timp n-am iesit din vector
{
++x[k]; // trec la urm valoare din domeniu
if (x[k] > nrMaxim) --k; // trec inapoi pe poz precedenta din vector dc am ajuns la sf domeniului pt acest k
else if (valid(x, k))
{
if (sol(x, k)) afisare(x, k);
else x[++k] = -1; // trec la urm pozitie si initializez cu prima val din afara dom
}
}
iesireFisier.println(nrSol + " solutii gasite");
out.println(nrSol + " solutii gasite");
}
private static void operatii () throws FileNotFoundException, IOException, Exception
{
if (intrareFisier.hasNextInt()) n = intrareFisier.nextInt(); // pt intrare tastaturea se fol intrareTastatura
if (!(n > 0)) // dc n exista si dc n >= 1
{
err.println("Fisierul de intrare trebuie sa contina un numar intreg n >= 1");
exit(-1); // sau System.
}
fib = convLaIntPrimitiv(genereazaTermFib());
backtracking();
}
public static void main(String[] args)
{
if (args.length != 2)
{
err.println("Argumente: fisierIntrare si fisierIesire !");
exit(-1);
}
try
{
intrareFisier = new Scanner(new BufferedReader(new FileReader(args[0])));
iesireFisier = new PrintWriter(new BufferedWriter(new FileWriter(args[1])));
//intrareTastatura = new Scanner(new BufferedReader(new InputStreamReader(in)));
operatii();
}
catch (FileNotFoundException e)
{
err.println("EROARE CATASTROFALA: imposibli de gasit fisierul");
e.printStackTrace();
}
catch (IOException e)
{
err.println("EROARE APOCALIPTICA: operatie intrareFisier/iesireFisier esuata lamentabil");
e.printStackTrace();
}
catch (Exception e)
{
err.println("EROARE 821098313: adica necunoscuta");
e.printStackTrace();
}
finally
{
if (intrareFisier != null) intrareFisier.close();
if (iesireFisier != null) iesireFisier.close();
}
}
}
void backtracking () // functia de backtracking
{
int nrMaxim // = maxim posibil pt un elem
int lungime // = lungimea vectorului
int[] x = new int[lungime];
int k = 0;
// initializ cu prima poz din vector
x[k] = -1;
// initializ cu primu elem din afara domeniului
while (k > -1)
// cat timp n-am iesit din vector
{
++x[k];
// trec la urm valoare din domeniu
if (x[k] > nrMaxim) --k;
// trec inapoi pe poz precedenta
else if (valid(x, k))
{
if (sol(x, k)) afisare(x, k);
else x[++k] = -1;
// trec la urm pozitie si initializez cu prima val din afara dom
}
}
}
Recent Comments