alexnaita Posted November 5, 2015 Report Posted November 5, 2015 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 ! Quote
Active Members MrGrj Posted November 5, 2015 Active Members Report Posted November 5, 2015 Arata-ne ce ai facut pana acum si te ajutam cu mare drag. Daca nu, vorba lu @MrGrj, cerseste in alta parte (mwe) Quote
alexnaita Posted November 5, 2015 Author Report Posted November 5, 2015 Sunt incepator si nu gasesc pe nicaieri de aia am cerut ajutor aici... Quote
tjt Posted November 5, 2015 Report Posted November 5, 2015 (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 November 5, 2015 by tjt Quote
Active Members MrGrj Posted November 5, 2015 Active Members Report Posted November 5, 2015 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. Quote
Byte-ul Posted November 7, 2015 Report Posted November 7, 2015 Nu am gasit nimic ce sa ma ajute, ma bate ingrozitor !Pai nu crezi ca e cazul sa incerci altceva? Matematica si informatica nu sunt de tine. 1 Quote
alexnaita Posted November 7, 2015 Author Report Posted November 7, 2015 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, ; }} Quote
tjt Posted November 7, 2015 Report Posted November 7, 2015 (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 November 7, 2015 by tjt Quote
alexnaita Posted November 7, 2015 Author Report Posted November 7, 2015 Multumesc foarte mult ! Quote
kznamst Posted November 7, 2015 Report Posted November 7, 2015 O varianta e sa sortezi vectorul descrescator(in acelasi timp elimini valorile care se repeta) dupa care faci suma primelor m elemente din vector. Quote