1

Тема: Масив і Файл

У масиві знайти відрізок максимальної довжини, в якому перше число рівне останньому, друге - передостанньому і так далі Надрукувати характеристики цього відрізка (довжину і номер першого елементу). Розмір масиву (Nі10) задається з клавіатури. Масив може заповняться уручну або автоматично (з файлу або за допомогою функції random()). Результат роботи програми виводиться на монітор і у файл (output.txt). Передбачити обробку помилок.

package pr1_5;
import java.util.*;
public class Pr1_5
{

    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter your N: ");
        int n = in.nextInt();
        int[] arrInt = new int[n];
        int temp;
        for(int i = 0, j = n-1; i <= n/2+1; ++i,--j)
        {
            temp = (int)(Math.random()*(200+1))-100;
            arrInt[i] = temp;
            arrInt[j] = temp;

        }
        String pattern = Arrays.toString(arrInt).replaceAll(" ","")
            .substring(1).replace(']', '\0');

        Set<String> subPatterns = getSetSubstrFromIntArr(arrInt);
        for (String keyStr : subPatterns)
            if (pattern.indexOf(keyStr) != -1)
            {
                System.out.println(keyStr);
                break;
            }
    }

    static Set<String> getSetSubstrFromIntArr(int[] arrInt)
    {
        Set<String> strSet = new TreeSet<>(Comparator.comparing(String::length).reversed());
        StringBuilder key = new StringBuilder();
        for (int i = arrInt.length-1; i >= 0 ; i--)
        {
            key.append(arrInt[i]).append(',');
            strSet.add(key.toString());
        }
        return strSet;
    }

}

2 Востаннє редагувалося Shelleex (31.01.2020 11:07:58)

Re: Масив і Файл

Допоможіть зробити до кінця і перевірити чи правильно я зрозумів умову.

Enter your N: 5
89,44,68,44,

Enter your N: 6
22,-17,-83,-83,-17,

3

Re: Масив і Файл

не бачу вкладених циклів

Подякували: koala1

4

Re: Масив і Файл

Умова трохи неоднозначна.

Shelleex написав:

друге - передостанньому і так далі

А відрізок з 1 елементу зараховується? Чи з непарної кількості? 3,4,3 - перший елемент дорівнює останньому, другий - передостанньому, правильно? Чи ні? Це потребує уточнення.

У коді ви робите щось страшне. Наївний алгоритм буде такий: робимо подвійний цикл (перший цикл по початку, другий - по довжині) і в ньому (ще в одному циклі) перевіряємо, чи не є відрізок паліндромом, та ще й максимальним. Десь так:

for(start = 0; start < arr.length; ++start)
    for(length = 1; length < arr.length - start; ++length)
        if(is_palindrome(arr, start, length))
            if(length > max_length) {
                max_length = length;
                max_start = start;
            }

Звісно, знадобиться функція is_palindrome із циклом, але там ніби нічого надскладного.
Можна трохи оптимізувати, якщо другий цикл починати не з 1, а з поточного максимуму.
І зробіть перевірку на помилки - я так розумію, простого hasNextInt вам має вистачити.

5 Востаннє редагувалося Shelleex (31.01.2020 11:55:23)

Re: Масив і Файл

Ну я як зрозумів 3,4,3 буде правильно.
3 = 3, 4 центральний.

Напевно за 1 зараховується, непарний теж повинен напевно.