Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 30

Задача. Рейтинг отелей

30.07.2016, 17:39. Показов 2709. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Значитак предположим.
Входные данные.
1) 5 - число обозначает сколько всего отелей ( тоесть длину массива)
2)4456, 666, 54, 3, 234 - эти числа обозначают рейтинг каждого отеля. (числа которые вносим в сам массив)

Выходные данные.
5 звёзд 4 звезды 2 звезды 1 звезда 3 звезды - и как вы уже понели мы присваиваем каждому отелю звёзды опираясь на их рейтинг. (ВАЖНО чтоб выводилось звёздность в тойже последовательности как вводился рейтинг.

И вот до меня не очень доходит реализация.
Пока надумал только на нахождение максимального в массиве присвоение ему 100% и при определённом проценте от максимума через switch cace назначать звезду 1/2/3/4/5.

Но не очень доходит как реализовать проценты потомучто входные данные могут быть не только на 5 отелей, но и 10 где каждой звёздности должно быть по 2 отеля (тоест 2 отеля по 1 зведе, 2 отеля по 2 звезды и тд....)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.07.2016, 17:39
Ответы с готовыми решениями:

бронирование отелей через пластиковые карты
Здравствуйте! Есть тур-фирма у них есть сайт, который им сделала группа разработчиков. Сейчас эта тур-фирама хочет внедрить в свой сайт...

Совет для создания сайта списка отелей
Добрый день! Мне нужен совет. Начал делать проект с 0 знаниями( не спрашивайте почему, все так получилось) В общем, нужно для своего...

Класс THotel, вывод списка отелей для указанного пользователем города
Класс THotel: Элементы-данные: Название отеля, Город, Количество звезд, Информация об общем количестве номеров для каждого класса (VIP,...

15
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
30.07.2016, 18:14
Typax, вряд ли прокатит с процентами: слишком уж у рейтингов нелинейная характеристика: от четырёх звёзд до пяти расстояние в 3790, а от 1 до 2 всего 51. Нужен какой-то критерий. Типа: больше 1000 - пятёрка, больше 500 - четыре и так далее... А программно можно совсем просто сделать:
Java
1
2
3
4
        int[] array = {4456, 566, -14, 3, 234, 612, 54, 5, 2344};
        for(int temp : array){
            System.out.println(temp > 1000? 5 : temp > 500 ? 4 : temp > 100 ? 3 : temp > 10 ? 2 : temp > 0 ? 1 : "Невозможно оценить рейтинг");
        }
ожидаемый вывод на экран:
Java
1
2
3
4
5
6
7
8
9
5
4
Невозможно оценить рейтинг
1
3
4
2
1
5
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 30
30.07.2016, 18:38  [ТС]
HOBATOP, Да это былоб хорошо еслиб требовалось сделать фиксированное назначение звёзд, но входные даннык могут быть и такие 11 14 33 4 1 . И из этого следует, что по вашему коду никто не получить 5 звёзд, 4 звезды, 3 звезды. А в задачке требуется оценить каждый отель и дать ему звёзды опираясь только на этот массив. Тоесть

Входные данные 11 14 33 4 1
Выходные 3 звезды 4 звезды 5 звёзд 2 звезды 1 звезда

Код должен быть составлен так чтобы один и тот же код работал на множетво входных данных и с разными рейтингами. А настроить например программу под один определённый массив не канает.
0
 Аватар для mocivan
95 / 95 / 50
Регистрация: 07.07.2015
Сообщений: 208
30.07.2016, 18:38
например:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package samples.hotels;
 
public class Hotel implements Comparable<Hotel> {
    private int rating;
    private int star;
 
    public Hotel(int rating) {
        this.rating = rating;
        this.star = 0;
    }
 
    public Hotel(int rating, int star) {
        this.rating = rating;
        this.star = star;
    }
 
    public int getRating() {
        return rating;
    }
 
    public void setRating(int rating) {
        this.rating = rating;
    }
 
    public int getStar() {
        return star;
    }
 
    public void setStar(int star) {
        this.star = star;
    }
 
    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Hotel{");
        sb.append("rating=").append(rating);
        sb.append(", star=").append(star);
        sb.append('}');
        return sb.toString();
    }
 
    @Override
    public int compareTo(Hotel o) {
        return Integer.compare(this.getRating(), o.getRating());
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package samples.hotels;
 
import java.util.Arrays;
import java.util.Scanner;
 
public class HotelRatingAssignment {
    public static void main(String[] args) {
        int arrayLength;
        Hotel[] hotels = null;
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("Set number of hotels:");
            arrayLength = scanner.nextInt();
            if (arrayLength <= 0 || arrayLength % 5 > 0) {
                throw new IllegalArgumentException("Wrong input data.");
            }
            hotels = new Hotel[arrayLength];
            for (int i = 0; i < hotels.length; i++) {
                System.out.println("Set rating of next hotel:");
                hotels[i] = new Hotel(scanner.nextInt());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        Hotel[] sortedHotels = new Hotel[hotels.length];
        System.arraycopy(hotels, 0, sortedHotels, 0, hotels.length);
        Arrays.sort(sortedHotels);
        int stars = 1;
        for (int i = 0; i < sortedHotels.length; ) {
            int starLevelCapacity = sortedHotels.length / 5;
            while (starLevelCapacity > 0) {
                sortedHotels[i].setStar(stars);
                i++;
                starLevelCapacity--;
            }
            stars++;
        }
        for (int i = 0; i < hotels.length; i++) {
            for (int j = 0; j < sortedHotels.length; j++) {
                if (hotels[i].getRating() == sortedHotels[j].getRating()) {
                    System.out.println(sortedHotels[j].getStar() + "star(s)");
                    break;
                }
            }
        }
    }
}
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
30.07.2016, 18:51
Цитата Сообщение от Typax Посмотреть сообщение
Входные данные 11 14 33 4 1
Выходные 3 звезды 4 звезды 5 звёзд 2 звезды 1 звезда
Вот как хотите, но не понимаю я такой логики. То есть приехали эксперты в Лондон: этот отель 5000 баллов набрал - пять звёзд, этот 1000 - четыре; потом приехали в Тихуану - О-о-о!!! - этот отель набрал 50 баллов (ну в одном из номеров есть туалет типа "дырка в полу") - пять звёзд однозначно!, а этому отелю не повезло, вообще удобств нет, да ещё и персонал вас обокрал - но четыре звезды положены, потому что 2 балла, у остальных отелей не известно: экспертов замочили...
Или у меня с логикой скверно, или условие задачи как-то, мягко говоря, "не очень удачно сформулировано"... :-)
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 30
30.07.2016, 19:23  [ТС]
HOBATOP, Да условие так себе, но как я понял на протяжении работы этой программы в неё будут заносится различные массивы с отлями со своими рейтингами из разных городов, тоесть у каждого городо своё понимание, что 5 звёзд это 100-80% от максимального рейтинга отеля ИМЕННО в этом городе xDD знаю звучит странно.

Можно ещё находить минимальный рейтинг назначать ему 1 звезду, выводить из программы и удалять из массива. Далее опять находить минимальное значение и присваивать уже 2 звезды и тд.....
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2016, 20:10
Typax, найдите минимум и максимум. Промежуток между этими значениями разделите на 5 равных отрезков. Это и будут ваши звезды.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
30.07.2016, 21:40
KEKCoGEN,
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
разделите на 5 равных отрезков. Это и будут ваши звезды
- да нет, не получается. У ТС'a задано:
Цитата Сообщение от Typax Посмотреть сообщение
2)4456, 666, 54, 3, 234 - эти числа обозначают рейтинг каждого отеля.
и этот массив должен выдать вот такой рейтинг:
Цитата Сообщение от Typax Посмотреть сообщение
5 звёзд 4 звезды 2 звезды 1 звезда 3 звезды
А если сделать просто делением ((4456 - 3) / 5 = 890,6) мы получим рейтинг 5, 1, 1, 1, 1 - поскольку у всех отелей оценка меньше 890...
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2016, 21:57
Цитата Сообщение от HOBATOP Посмотреть сообщение
А если сделать просто делением ((4456 - 3) / 5 = 890,6) мы получим рейтинг 5, 1, 1, 1, 1 - поскольку у всех отелей оценка меньше 890...
ну значит так оно и есть. В этом городе только 1 пятизвездочный отель.

Цитата Сообщение от HOBATOP Посмотреть сообщение
и этот массив должен выдать вот такой рейтинг:
я думаю что ТС имел в виду что это возможный вариант. Пусть ТС скажет что обязательно должен быть весь набор звезд, тогда можно будет предложить другой алгоритм.
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 30
30.07.2016, 22:15  [ТС]
KEKCoGEN, нет, условии всё равно. Оно гласит чтоб в каждом массиве были все звёзда причём в равном кол-во тоесть если в входных данных указать 10 отелей, а не 5 должно выдать( 2 отеля 5 звёзд, 2 отеля 4 звезды, 2 отеля 3 звезды и тд...) причём выводить звёздность в том порядке в которым сам рейтинг отелей.

Вот на такое условия я наткнулся на testee.ru. Там было вроде похоже на посказку. Похожее на нахождении минимального отеля(рейтинга) присваивание ему минимальную звезду тоесть (1) выводить и удалять с массива и так далее только уже примвать 2 звезды и так до 5. Но выводится будет 1, 2, 3, 4, 5. Но это не правильно и всё это не правильно xDD
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2016, 22:20
Цитата Сообщение от Typax Посмотреть сообщение
причём выводить звёздность в том порядке в которым сам рейтинг отелей.
Цитата Сообщение от Typax Посмотреть сообщение
выдать( 2 отеля 5 звёзд, 2 отеля 4 звезды, 2 отеля 3 звезды и тд...)
это взаимоисключающие условия. То есть либо вы неверно поняли условие, либо задача не имеет решения.
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 30
30.07.2016, 22:21  [ТС]
KEKCoGEN, или найти максимум - это будет 100% и через switch case (80%, 50%....) звёзда, но там вроже он будет подрят звёздность выводить, а нам надо прям как в массиве рейтинг в том же порядке.
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 30
30.07.2016, 22:28  [ТС]
KEKCoGEN, Вот фото где показаны входные и выходные данные. На один и тот же код мб 20 тестов различных.
Входные данные
1 строчка обозначает длину массива(кол-во отелей)
2 строчка рейтинг каждого массива
Миниатюры
Задача. Рейтинг отелей  
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2016, 22:29
насчет взаимоисключающих я ошибся. Если должно быть равное кол-во по звездности отелей тогда можно решить как надо.
1. Вычислить сколько отелей каждой категории должно быть
2. Брать максимум и присваивать ему текущую звездность
3. Сохранить места отеля в массиве.
4. Удалять отель из массива.
5. Вывести все отели в оригинальном порядке, сохраненным на шаге 3 и их звезднсть посчитанным в шаге 2
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
31.07.2016, 00:23
Typax, интересно, по какой логике в первом случае рейтинг 99 получает 4 звезды (при максимуме 100 и минимуме 1), а во втором случае рейтинг 90 получает 5 звёзд (при максимуме 100 и минимуме 10). Собственно решение я бы как-то так сделал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
class Hotels {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int numHotels = scanner.nextInt();
        int ratings[] = new int [numHotels];
        for ( int i = 0; i < numHotels; ++i )
            ratings[i] = scanner.nextInt();
        int maxRatingIndex = 0;
        for ( int i = 1; i < numHotels; ++i )
            if ( ratings[i] > ratings[maxRatingIndex] )
                maxRatingIndex = i;
        for ( int i = 0; i < numHotels; ++i ) {
            double rate = (double)ratings[i] / ratings[maxRatingIndex];
            int stars = ( rate > 0.8 ) ? 5 : ( rate > 0.6 ) ? 4 : ( rate > 0.4 ) ? 3 : ( rate > 0.2 ) ? 2 : 1;
            System.out.print(stars + " ");
        }
        
        System.out.println();
        scanner.close();
    }
}
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 30
31.07.2016, 00:58  [ТС]
easybudda, как я писал выше в этой задачи нет понятия что выше 100 это 5 звёзд она вообще не берёт во внимания другие отели с массива и на них никак не операется. В неё вкладывает массив и отель с максимальныйм рейтингом ИМЕННО В ЭТОМ МАССИВЕ получает 5 звёзд, а следующее число которое меньше максимального получит уже 4 и без разницы меньше оно на 1 бал или на 1000 главное что оно меньше максимального и больше того числа которому мы присвоем 3 звезды. Входные данные в массив(рейтинг) как я понел всегда разный. И в массиве должно быть все разряды звёздности и в равном кол-во если например в массив вносится 10 отелей, то каждой звезды должно быть по 2 штуки.

Условие не моё взято с testee.ru
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.07.2016, 00:58
Помогаю со студенческими работами здесь

Где можно взять свободные API данные для поиска отелей по названию города
Нужно сделать приложение в React по поиску отелей по названию города, не могу найти API данные, чтобы делать get запрос. Нужно вывести...

Рейтинг
Привет всем. Подскажите пожалуйста, как сделать рейтинг на подобии того как был в вк. Может есть какие то примеры.. ...

Рейтинг и бд
Доброго времени суток нужна ваша помощ есть бд CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `login` varchar(15)...

рейтинг
стоит ли ставить на узкотематическом сайте такой же узкотематический топ? как на это отреагируют поисковики?

Рейтинг
Есть страница оптимизированная под слово допустим &quot;123&quot;. В поисковике по этому запросу я допустим на 30 месте. Что бы поднять его выше, мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru