level06.lesson11.bonus03

/* Задача по алгоритмам
Задача: Написать программу, которая вводит с клавиатуры 5 чисел и выводит их в возрастающем порядке.
Пример ввода:
3
2
15
6
17
Пример вывода:
2
3
6
15
17
*/

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int [] array = new int[5];
for (int i = 0; i < array.length; i++){
int oneNumber = Integer.parseInt(reader.readLine());
array[i] = oneNumber;
}
//Collections.sort(array, new Comparator();
Arrays.sort(array);

for (int i: array)
{
System.out.println(i);
}
}
}

Полностью рабочий код, но на сервере не компилируется. Помогите плз.

level06.lesson11.bonus03

/* Задача по алгоритмам
Задача: Написать программу, которая вводит с клавиатуры 5 чисел и выводит их в возрастающем порядке.
Пример ввода:
3
2
15
6
17
Пример вывода:
2
3
6
15
17
*/

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int [] array = new int[5];
for (int i = 0; i < array.length; i++){
int oneNumber = Integer.parseInt(reader.readLine());
array[i] = oneNumber;
}
//Collections.sort(array, new Comparator();
Arrays.sort(array);

for (int i: array)
{
System.out.println(i);
}
}
}

Полностью рабочий код, но на сервере не компилируется. Помогите плз.

level06.lesson11.bonus03

/* Задача по алгоритмам
Задача: Написать программу, которая вводит с клавиатуры 5 чисел и выводит их в возрастающем порядке.
Пример ввода:
3
2
15
6
17
Пример вывода:
2
3
6
15
17
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader  = new BufferedReader(new InputStreamReader(System.in));
        int [] array = new int[5];
        for (int i = 0; i < array.length; i++){
            int oneNumber = Integer.parseInt(reader.readLine());
            array[i] = oneNumber;
        }
        //Collections.sort(array, new Comparator<ObjectName>();
        Arrays.sort(array);

        for (int i: array)
        {
            System.out.println(i);
        }
    }
}


Полностью рабочий код, но на сервере не компилируется. Помогите плз.

level06.lesson11.bonus03

/* Задача по алгоритмам
Задача: Написать программу, которая вводит с клавиатуры 5 чисел и выводит их в возрастающем порядке.
Пример ввода:
3
2
15
6
17
Пример вывода:
2
3
6
15
17
*/

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int [] array = new int[5];
for (int i = 0; i < array.length; i++){
int oneNumber = Integer.parseInt(reader.readLine());
array[i] = oneNumber;
}
//Collections.sort(array, new Comparator();
Arrays.sort(array);

for (int i: array)
{
System.out.println(i);
}
}
}

Полностью рабочий код, но на сервере не компилируется. Помогите плз.

Как попасть на собеседование в facebook?

Привет!

На днях я наткнулся на одну занимательную задачку «Закрутить числа». А сегодня как раз выдался свободный день и я решил совместить приятное с полезным. Посидеть дома, под прохладой кондиционера (на улице +30!) и немного покодить.
Задача достаточно интересная, хотя для кого-то и не новая. Но речь пойдет даже не о самом алгоритме или способе его реализации, а о проблеме, на которую меня натолкнул один знакомый тестировщик.

Ну и про фейсбук, конечно! :) Ныряй под кат, поехали!

level05.lesson12.bonus03

Доброго времени суток. Работает правильно, а проверку не проходит. В чем дело?

package com.javarush.test.level05.lesson12.bonus03;

/* Задача по алгоритмам
Написать программу, которая:
1. вводит с консоли число N > 0
2. потом вводит N чисел с консоли
3. выводит на экран максимальное из введенных N чисел.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int maximum = 0;

        int N = Integer.parseInt(reader.readLine());
        int[] array = new int[N];

        for(int i = 0; i < N;i++) {
            array[i] = Integer.parseInt(reader.readLine());
        }
        
        for(int i = 0; i < array.length; i++) {
            if(array[i] > maximum) {
                maximum = array[i];
            }
        }

        System.out.println(maximum);
    }
}

Обсуждение задач level18.lesson03.task03 и level18.lesson03.task04

Недавно долго не мог решить эти задачи, казалось они элементарные. Подобная уже была, когда нужно было подсчитать количество букв в тексте.

Итак условие задачи:
/* Самые частые/редкие байты
Ввести с консоли имя файла
Найти байты, которые встречаются в файле меньше всего раз.
Вывести их на экран через пробел
Закрыть поток ввода-вывода
*/

Топик создается для того чтобы найти правильное решение. Вариантов есть несколько.

В задаче на алфавит все наверное использовали HashMap. Казалось бы можно было скопировать код, поменять источник с консоли на файл, и все. Но здесь можно обойтись массивом, где индексом будет значение байта, а значением элемента — количество.

    int[] howManyTimesIsByteInFile = new int[256];


Массив есть, как в него записать нужные данные я думаю вы знаете. Теперь задача обработать. Хочется в 1 проход, так как очень легкая задача.

    LinkedList<Integer> bytes = new LinkedList<Integer>();
    int maxCount = 0;
        for (int i = 0; i < howManyTimesByteIsInFile.length ; i++)
        {
            if(howManyTimesISByteInFile[i] >= maxCount){
               int n = howManyTimesISByteInFile[i];
                if(n == maxCount){
                       bytes.add(i);
                }
                if(n > maxCount){
                    maxCount = n;
                    bytes.clear();
                    bytes.add(i);
                }   
            }
        }


Очищаем список, чтобы не было элементов, которые встречаются меньше, чем самый частый. Но такой вариант мне не нравится, две проверки, и постоянное очищение списка. Я выбрал решение в два прохада.


        int minCount = 0;
        for (int i = 0; i < howManyTimesByteIsInFile.length ; i++)
        {
            if(howManyTimesByteIsInFile[i] < minCount){
                minCount = howManyTimesByteIsInFile[i];
            }
        }

        LinkedList<Integer> bytes = new LinkedList<Integer>();

        for (int i = 0; i < howManyTimesIsByteInFile.length; i++)
        {
            if(howManyTimesByteIsInFile[i] <= minCount ){
               bytes.add(i);
            }
        }

Сначала ищем максимум/минимум. А вторым проходом находим кто нам подходит. В 8й джаве можно решать задачу даже без циклов, там есть Stream API, на сколько я знаю. Так вот какое решение наиболее оптимально: HashMap vs Array, и один проход vs два прохода?
Вычислительная сложность в обоих случаях O(n), в двух проходах какбы 2n, но 2 это константа, которую можем отбросить. В то же время в одном проходе больше операций с очищением списка.

Три массива, не проходит проверку

Почему не проходит проверку?
package com.javarush.test.level07.lesson09.task01;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/* Три массива
1. Введи с клавиатуры 20 чисел, сохрани их в список и рассортируй по трём другим спискам:
Число делится на 3 (x%3==0), делится на 2 (x%2==0) и все остальные.
Числа, которые делятся на 3 и на 2 одновременно, например 6, попадают в оба списка.
2. Метод printList должен выводить на экран все элементы списка  с новой строки.
3. Используя метод printList выведи эти три списка на экран. Сначала тот, который для x%3, потом тот, который для x%2, потом последний.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        ArrayList<Integer> list = new ArrayList<Integer>();
        ArrayList<Integer> list3 = new ArrayList<Integer>();
        ArrayList<Integer> list2 = new ArrayList<Integer>();
        ArrayList<Integer> listAll = new ArrayList<Integer>();
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 20; i++) {
            list.add(sc.nextInt());
        }
        for (int i = 0; i < 20; i++) {
            int ai = list.get(i);
            if (ai%3 == 0) {
                list3.add(ai);
            }
            else if (ai%2 == 0) {
                list2.add(ai);
            }
            else if (ai%3 == 0 && ai%2 == 0) {
                list3.add(ai);
                list2.add(ai);
            }
            else {
                listAll.add(ai);
            }
        }
        printList(list3);
        printList(list2);
        printList(listAll);
    }

    public static void printList(List<Integer> list) {
        for (int e : list) {
            System.out.println(e);
        }
    }
}

level07.lesson09.task01


Программа компилируется, выводит всё правильно, но не проходит тестирование. Почему? :(
package com.javarush.test.level07.lesson09.task01;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/* Три массива
1. Введи с клавиатуры 20 чисел, сохрани их в список и рассортируй по трём другим спискам:
Число делится на 3 (x%3==0), делится на 2 (x%2==0) и все остальные.
Числа, которые делятся на 3 и на 2 одновременно, например 6, попадают в оба списка.
2. Метод printList должен выводить на экран все элементы списка  с новой строки.
3. Используя метод printList выведи эти три списка на экран. Сначала тот, который для x%3,
потом тот, который для x%2, потом последний.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<Integer> bigList = new ArrayList<Integer>();
        ArrayList<Integer> list3 = new ArrayList<Integer>();
        ArrayList<Integer> list2 = new ArrayList<Integer>();
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < 20; i++)
            bigList.add(Integer.parseInt(reader.readLine()));

        for (int i = 0; i < bigList.size(); i++)
        {
            if (bigList.get(i) % 3 != 0 && bigList.get(i) % 2 != 0)
                list.add(bigList.get(i));
            else if (bigList.get(i) % 3 == 0)
                list3.add(bigList.get(i));
            else if (bigList.get(i) % 2 == 0)
                list2.add(bigList.get(i));

        }
        printList(list3);
        printList(list2);
        printList(list);
    }

    public static void printList(List<Integer> list) {
        for (Integer x : list)
            System.out.println(x);
    }
}

Помощь в сортировке 2х мерного массива

Всем добрый день.

Прошу помочь в решении такой задачи:

Написать программу, которая генерирует двумерный массив, а затем сортирует его в
порядке возрастания суммы элементов строк.

Входные данные
Сгенерированный программой двумерный
массив:
1 2 9
2 3 0
6
Выходные данные
Массив отсортированный по сумме
элементов строк (под-массивов):
2 3 0
6
1 2 9

Буду очень благодарен за любые примеры и настановки, сам уже 15 часов протупил над задачей

Помощь в сортировке 2х мерного массива

Всем добрый день.

Прошу помочь в решении такой задачи:

Написать программу, которая генерирует двумерный массив, а затем сортирует его в
порядке возрастания суммы элементов строк.

Входные данные
Сгенерированный программой двумерный
массив:
1 2 9
2 3 0
6
Выходные данные
Массив отсортированный по сумме
элементов строк (под-массивов):
2 3 0
6
1 2 9

Буду очень благодарен за любые примеры и настановки, сам уже 15 часов протупил над задачей

level07.lesson04.task05

Ребят, кажется, я не понял самых очевидных вещей. У меня отказывается компилироваться самый простой код.
Даже забьем на выполнение задачи, посмотрите вот на это:
public class Solution
{
    public static void main(String[] args) throws Exception
    {
    int mas[] = new int[5];
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        for (int i=0;i<mas.length; i++){
            mas[i] = Integer.parseInt(reader.readLine());}

        for (int i = mas.length; i > 0 ; i--){
                System.out.println(mas[i]);
            }}}

даже это отказывается компилироваться в ide.
Причем, если убрать вывод именно mas[i] и поставить например число 5, то работает. А вот со значением массива получается лажа. Как будто при вводе с клавиатуры строки не сохраняются в массив.
Не могу понять в чем дело.