Witam…
W jaki sposob napisac w javie algorytm proszący o wpisanie 10 łańcuchow znakowych, sprawdzajacy czy wsrod nich sa takie same i podajacy liczbe takich samych napisow.
Oczywscie nie chodzi mi tu o metode silowa
Witam…
W jaki sposob napisac w javie algorytm proszący o wpisanie 10 łańcuchow znakowych, sprawdzajacy czy wsrod nich sa takie same i podajacy liczbe takich samych napisow.
Oczywscie nie chodzi mi tu o metode silowa
To znaczy masz znaleźć duble jak najmniejszym kosztem, tzn. nie porównywać każdego z każdym - 1 z 2, 3, 4, …10 i tak razy dziesięć? Tak wychodziłoby max 90 porównań (mam nadzieję, że dobrze liczę o tej godzinie
Mogę się mylić, w końcu rano jest, ale mam nadzieję, że dobrze myślę…
PS. Można by też trzymać je od razu w strukturze która trzyma dane uporządkowane. Niezbyt dobrze znam Javę, ale na pewno jest taka struktura wśród bibliotek standardowych.
PS2. Można to zrobić też za pomocą tablicy asocjacyjnej na zasadzie ciąg = ilość wystąpień. Tak przynajmniej duża część programistów zrobiłaby to w Perlu Domyślam się (zgaduję), że Java ma klasę tablic asocjacyjnych, tylko jest kwestia ich wydajności.
W javie nie da się napisać algorytmu. Podobnie jak w żadnym innym języku programowania.
Nadzieja nie jest najlepsza w tym przypadku Moim zdaniem 45 porównań (elementarne wiadomości z kombinatoryki czasem się przydają).
Aj, mea culpa, oczywiście że to będzie 10 nad 2 czyli 45, no ale o takich rzeczach o 7:30 się nie pamięta
Tutaj użycie HashMap będzie chyba najprostsze, najszybsze do napisania i w działaniu.
Cały kod: (pewnie nie jest optymalny, ale działa)
package stringcomp;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
Map map = new HashMap();
for( int i = 0; i < 10; i++ ){
String input = JOptionPane.showInputDialog("Podaj słowo");
Integer count = map.get(input);
map.put(input, count == null ? 1 : ++count);
}
System.out.println(map.toString());
}
}