Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Да се имплементира класа Names со следните методи:
- public void addName(String name) - додавање на име
- public void printN(int n) - ги печати сите имиња кои се појавуваат n или повеќе пати, подредени лексикографски според името, на крајот на зборот во загради се печати бројот на појавувања, а по него на крај бројот на уникатни букви во зборот (не се прави разлика на големи и мали)
- public String findName(int len, int x) - го враќа името кое со наоѓа на позиција x (почнува од 0) во листата од уникатни имиња подредени лексикографски, по бришење на сите имиња со големина поголема или еднаква на len. Позицијата x може да биде поголема од бројот на останати имиња, во тој случај се продожува со броење од почетокот на листата. Пример за листа со 3 имиња A, B, C, ако x = 7, се добива B. A0, B1, C2, A3, B4, C5, A6, B7.
- */
- import java.util.*;
- import java.util.stream.Collectors;
- class Names {
- Map<String, Integer> names;
- public Names() {
- names = new TreeMap<>();
- }
- public void addName(String name) {
- Integer count = names.computeIfAbsent(name, key -> 0);
- names.put(name, ++count);
- }
- public void printN(int n) {
- names.forEach((key, value) -> {
- if (value >= n)
- System.out.printf("%s (%d) %d\n", key, value, uniqueLetters(key));
- });
- }
- public String findName(int len, int x) {
- List<String> lista = names.keySet().stream().filter(name -> name.length() < len).collect(Collectors.toList());
- return lista.get(x % lista.size());
- }
- public int uniqueLetters(String name) {
- Set<Character> bukvi = new HashSet<>();
- for (Character c : name.toCharArray())
- bukvi.add(Character.toLowerCase(c));
- return bukvi.size();
- }
- }
- public class NamesTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int n = scanner.nextInt();
- scanner.nextLine();
- Names names = new Names();
- for (int i = 0; i < n; ++i) {
- String name = scanner.nextLine();
- names.addName(name);
- }
- n = scanner.nextInt();
- System.out.printf("===== PRINT NAMES APPEARING AT LEAST %d TIMES =====\n", n);
- names.printN(n);
- System.out.println("===== FIND NAME =====");
- int len = scanner.nextInt();
- int index = scanner.nextInt();
- System.out.println(names.findName(len, index));
- scanner.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment