Решаю задачу на java
Решаю следующую задачу. Реализовать программу на Java, которая для последовательности чисел, оканчивающихся на -1 выведет самую минимальную цифру, встречающуюся среди чисел последовательности.
Например:
345 298 456
Ответ: 2
Создал 2 варианта, но оба не работают. Я понимаю, что вводимые числа нужно разбить на цифры и только после этого определять минимум среди них. Но не знаю как реализовать. Вариант 1:
import java.util.Scanner;
public class homework05 {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int number = scn.nextInt();
int min = 0;
do {
number = scn.nextInt();
int digit1 = number / 100;
int digit2 = (number % 100)/10;
int digit3 = number % 10;
if (digit1 < digit2 && digit1 < digit3 && digit1 > -1){
min = digit1;
}
if (digit2 < digit1 && digit2 < digit3 && digit2 > -1){
min = digit2;
}
if (digit3 < digit1 && digit3 < digit2 && digit3 > -1){
min = digit3;
}
}while (number != -1);
System.out.println(min);
}
}
Вариант 2:
import java.util.Scanner;
public class homework05 {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int number = scn.nextInt();
int min = 0;
while (number != -1) {
int num = scn.nextInt();
int digit1 = num / 100;
int digit2 = (num % 100) / 10;
int digit3 = num % 10;
while (num != -1) {
if (digit1 < digit2 && digit1 < digit3 && digit1 > -1) {
min = digit1;
}
if (digit2 < digit1 && digit2 < digit3 && digit2 > -1) {
min = digit2;
}
if (digit3 < digit1 && digit3 < digit2 && digit3 > -1) {
min = digit3;
}
}
System.out.println(min);
}
}
}
Ответы (2 шт):
пишем в гугле число в массив java, третья ссылка в поиске ведёт на https://ru.stackoverflow.com/questions/1058001/Запись-цифр-числа-в-массив
выбираем понравившийся алгоритм (ну или тот который понятен) сохраняем или запоминаем.
потом ищем алгоритм поиска - минимальное число в массиве java первая ссылка ведёт на https://ru.stackoverflow.com/questions/887073/Как-найти-минимальное-значение-в-массиве-в-java выбираем понравившийся алгоритм (ну или тот который понятен) сохраняем или запоминаем.
затем создаём статик метод куда всё впихиеваем
static int minFromNumber(int number) {
int[] arr = new int[String.valueOf(number).length()];
for (int i = 0; i < arr.length; ++i) {
arr[i] += number % 10;
number /= 10;
}
int min = arr[0];
for (int num : arr) {
if (min > num) {
min = num;
}
}
return min;
}
проверяем на числе 345 298 456
вывод - 2
контрольная проверка, меням какую-нибудь цифру на 1, затем на 0. вроде работает...
ну вот и думаем, вызываем метод либо его содержимое копируем в класс.
как-то так.
либо следуем совету tym32167, и по выше описанным аглоритмам ищем как считывать не числа, а строки и искать в строке минимальный символ.
Существующий код жёстко привязан к трёхзначным числам, чего можно спокойно избежать, считывая числа во внешнем цикле, и обрабатывая каждое число во вложенном цикле. Также при нахождении минимальной цифры 0 можно досрочно заканчивать поиски, выходя из вложенного цикла с помощью break out, где out: - метка:
Scanner scn = new Scanner(System.in);
int min = 10; // на случай пустой последовательности ввода
int number;
out: // метка досрочного выхода
while ((number = scn.nextInt()) != -1) {
if (number == 0) { // проверить на 0 при вводе
min = 0;
break;
}
while (number > 0) {
int digit = number % 10;
if (digit < min) {
min = digit;
if (min == 0) { // проверить на 0 внутри числа
break out;
}
}
number /= 10;
} // проверка числа закончена
} // ввод чисел закончен
if (min < 10) {
System.out.println("Минимальная цифра: " + min);
} else {
System.out.println("Минимальная цифра не обнаружена"); // сразу ввели -1
}