Jump to content
alexnaita

Program Java

Recommended Posts

Posted

Buna seara, am de facut un program si nu ma descurc deloc , ma puteti ajuta va rog frumos !

Cerinta este urmatoarea: "Determinati suma maxima care se poate forma cu "m" numere distincte dintr-un vector ce contine "n" valori intregi. Daca sirul contine mai putin de m valori distincte se va asa mesajul Imposibil. Pentru rezolvarea problemei se va folosi clasa Vector."

Multumesc mult , raman dator !

Posted (edited)
Buna seara, am de facut un program si nu ma descurc deloc , ma puteti ajuta va rog frumos !

Cerinta este urmatoarea: "Determinati suma maxima care se poate forma cu "m" numere distincte dintr-un vector ce contine "n" valori intregi. Daca sirul contine mai putin de m valori distincte se va asa mesajul Imposibil. Pentru rezolvarea problemei se va folosi clasa Vector."

Multumesc mult , raman dator !

Problema e relativ simpla. Trebuie doar sa o spargi in mai multe subprobleme.

Prima subproblema: Generarea submultimelor de lungimea "m" din multimea "V" de lungime "n".

Daca "m" > "n" afisam "IMPOSIBIL"

Google it "Generate all subsets of a fixed size k of a given set"

A doua subproblema: Calcularea sumei pentru fiecare submultime si realizarea unui max pentru sumele obtinute.

Google it "find maximum value"

Dupa ce ai reusit sa faci cele doua subprobleme, te poti uita la Vector class sa vezi cu ce te ajuta.

Google it "Vector class java"

Edited by tjt
  • Active Members
Posted

Bun. Tot ar trebui sa incerci, chiar daca esti incepator. Iti dau eu niste puncte de reper:

1. Stii ce este o suma, nu ? a + b + c + ... + n = S, unde ai o conditie simpla, si anume a != b != c !=...!=n ( adica toate elementele tre' sa fie diferite intre ele ).

1*. Faptul ca n este necunoscut de indica faptul ca il putem introduce de la tastatura.

2. Suma a m numere, ne indica faptul ca putem alege orice m dorim dar ca trebuie sa avem grija la trei conditii:

- sa fie numar natural

- sa nu fie mai mare ca n

- sa fie mai mare ca 0 ( nu poti efectua suma a -1 elemente )

Ai rezolvat jumatate de problema.

Mai departe:

Trebuie sa bagam numerele alea intr-un vector, in care putem cauta m valor maxime a caror suma sa fie maxima.

Si tot asa.

Acum pentru fiecare pas, incearca sa te documentezi si revin-o cu ce ai reusit sa faci.

Posted

Pana la urma am reusit sa gasesc ceva pe net dar nu stiu unde trebuie atasat mesajul "Imposibil". Asta este programul.

public class Suma {

public void subset(int[] A, int n, int m, int currLen, boolean[] used) {

if (currLen == n) {

for (int i = 0; i < A.length; i++) {

if (used == true) {

System.out.print(A + " ");

}

}

System.out.println();

return;

}

if (m == A.length) {

return;

}

used[m] = true;

subset(A, n, m + 1, currLen + 1, used);

used[m] = false;

subset(A, n, m + 1, currLen, used);

}

public static void main(String[] args) {

int A[] = { 1, 2, 3,4};

boolean[] B = new boolean[A.length];

Suma i = new Suma();

i.subset(A, 3, 0, 0, B);

}

}

Posted (edited)


/*
* Buna seara, am de facut un program si nu ma descurc deloc , ma puteti ajuta va rog frumos !
* Cerinta este urmatoarea: "Determinati suma maxima care se
* poate forma cu "m" numere distincte dintr-un vector ce contine "n" valori intregi.
* Daca sirul contine mai putin de m valori distincte se va afisa mesajul Imposibil.
* Pentru rezolvarea problemei se va folosi clasa Vector."
* Multumesc mult , raman dator !
*/

import java.util.Vector;

public class Suma {

private int sumaMaxima = 0;

public void subset(Vector<Integer> A, int n, int m, int currLen, boolean[] used) {

if (currLen == n) {
int sumaTemp = 0;
for (int i = 0; i < A.size(); i++) {
if (used[i] == true) {
//calculam suma pentru fiecare subset
sumaTemp += A.get(i).intValue();

// daca intalnim o suma mai mare decat cea de la pasul precedent actualizam sumaMaxima
if(sumaTemp > sumaMaxima)
sumaMaxima = sumaTemp;
//System.out.print(A.get(i).intValue() + " ");
}
}
//System.out.println();
return;
}
if (m == A.size()) {
return;
}
used[m] = true;
subset(A, n, m + 1, currLen + 1, used);
used[m] = false;
subset(A, n, m + 1, currLen, used);
}

public Vector<Integer> removeDuplicates(Vector<Integer> v){
//Vector temporar ce va contine elementele care nu sunt duplicate
Vector<Integer> temp = new Vector<Integer>();

for(int i = 0; i < v.size(); i++){
if(temp.contains(v.get(i))){
continue;
}
temp.add(v.get(i));
}
return temp;
}

public void solveMyProblem(Vector<Integer> A, int m){
Vector<Integer>temp = removeDuplicates(A);

if(temp.size() < m){
System.out.println("IMPOSIBIL");
} else {
boolean[] B = new boolean[temp.size()];
subset(temp, m, 0, 0, ;
System.out.println("Suma maxima: " + sumaMaxima);
}
}

public static void main(String[] args) {
int A[] = { 10, 40, 20, 30, 40, 10, 20};
int m = 3;

Vector<Integer> vector = new Vector<Integer>(A.length);
for (int i = 0; i < A.length; i++) {
vector.add(A[i]);
}

Suma s = new Suma();
s.solveMyProblem(vector, m);

}

}

@alexnaita sper sa te ajute.

Edited by tjt

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...