не очень понятно как написать логику алгоритма: найти максимальное число из N вводимых чисел.
Первое считанное число с клавиатуры определяет сколько нужно ввести чисел. это понятно.
Вопрос 1 - как прописать чтоб программа пропустила именно это количество чисел? Через цикл for?
И вопрос 2 - как из них найти максимальное?
в моем коде программа бесконечно вводит первое число считанное с клавиатуры.
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int maximum = 0;
int N = Integer.parseInt(reader.readLine());
while (true) if (N > 0) {
for (int i = 0; i < N; i++) {
if (N > maximum) {
maximum = N;
}
}
System.out.println(maximum);
} else
break;
}
}
ak
22 уровень
как написать алгоритм максимального числа?
Обсуждается
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Михаил
13 марта 2020, 20:15
Попробуй для начала описать алгоритм на словах, по-русски, потом попытайся перевести на Java. Или наоборот, переведи то, что ты написал на ЯП на свой язык. Мне практически всегда помогает увидеть логические косяки.
Конкретно к решению задачи это косвенно относится, но в целом, такой навык очень неплохо помогает, особенно в задачах посложнее.
+1
ak
13 марта 2020, 20:23
обычно таки делаю. поэтому и задал вопрос т.к логика алгоритма не понятна была
0
Nataliya K.
13 марта 2020, 20:07
1. Можно через цикл for
2. Первое считанное число - это максимум, сравниваем в цикле максимум с каждым введенным числом, если оно больше, значит максимуму присваиваем новое значение
+1
ak
13 марта 2020, 20:22
спасибо. вот что получилось:
import java.io.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(reader.readLine());
int maximum = Integer.parseInt(reader.readLine());
while (true) if (n > 0) {
for (int i = 1; i < n; i++) {
int num = Integer.parseInt(reader.readLine());
maximum = maximum >= num ? maximum : num;
}
System.out.println(maximum);
}
else break;
}
}
0
Nataliya K.
13 марта 2020, 20:35
тебе не нужен тут цикл while, зачем ту его используешь?
если ты хочешь проверить первое введенное число, что оно больше 0, то используй просто if
1. Ввел число N
2. Проверил что оно больше 0, если больше переходишь на 3, если меньше ничего не нужно делать
3. Максимум = первое считанное число
4. Пробежался в цикле по всем остальным введенным числам и сравнил их с максимумом.
5. Вывел максимиум
0
ak
13 марта 2020, 20:53
я правильно понял?
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(reader.readLine());
int maximum ;
if (n > 0) {
maximum = n;
for (int i = 1; i < n; i++) {
maximum = maximum >= n ? maximum : n;
}
System.out.println(maximum);
}
else
System.out.println();
0
Nataliya K.
13 марта 2020, 21:00
нет, n - это количество чисел, которое нужно ввести
Ты сначала вводишь его (например 10), а потом считываешь 10 чисел те, среди которых будешь искать максимум.
Т.е. Максимум у тебя должно быть изначально равно не n, а первому введенному числу, т.е. int maximum = Integer.parseInt(reader.readLine());
0
Михаил
13 марта 2020, 21:07
Уже ближе ;-)
Только тут N - КОЛИЧЕСТВО чисел, которые нужно считать с консоли. Еще раз - это количество, оно никакого отношения не имеет к самой последовательности чисел, среди которых нужно найти максимум.
Представь что тебе сказали: будет десять карточек с числами, найди среди них максимальное. И последовательно тебе дают карточки с числами. Как ты поступишь?
Будешь искать максимальное среди тех, что тебе уже дали - сперва у тебя одна карточка, значит максимальное число - то что на ней написано. Когда тебе дают вторую карточку, ты сравнишь её с первой, ту карточку которая больше, ты пометишь, как максимальную (!на данный момент). Затем третья - так же сравниваешь её с максимумом и помечаешь наибольшую. И так далее, пока тебе не дадут последнюю карточку.
0
ak
14 марта 2020, 09:52
хорошо, это я понял)
а как значение maximum сранить со следующим числом переменной maxinum?
int maximum = Integer.parseInt(reader.readLine());
for (int i=1; i<n; i++) {
maximum = maximum >= x ? maximum : x;
}
в голове не укладывется как сравнить следующее число с предыдущим не добавляя еще одну переменную.
0
Nataliya K.
14 марта 2020, 11:06
тебе каждый раз нужно считывать новое значение с консоли (это у тебя Х), а потом сравнивать с максимумом
х = Integer.parseInt(reader.readLine())
0