Помощь в решении задачек javarush (до 10 уровня)

Anastasiya Fevraleva
Сообщения: 22
Зарегистрирован: 22 окт 2016, 21:51

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Anastasiya Fevraleva » 26 ноя 2016, 19:19

/* 10 процентов
Реализуйте метод addTenPercent, который увеличивает переданное целое число на 10%.
Исправьте ошибку в сигнатуре метода.
Подсказка: подумайте, какие у этого метода входные и выходные данные.
*/
public class Solution
{
public static void addTenPercent(int i) {
//напишите тут ваш код
}

public static void main(String[] args) {
System.out.println(addTenPercent(10));
}
}

Аватара пользователя
Maksim Sergeevich
Администратор
Сообщения: 200
Зарегистрирован: 08 дек 2013, 21:19
Откуда: Гусев
Контактная информация:

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Maksim Sergeevich » 26 ноя 2016, 20:05

/* Ближайшее к 10
Реализовать метод closeToTen. Метод должен выводить на экран ближайшее к 10 из двух чисел, записанных в аргументах метода.
Например, среди чисел 8 и 11 ближайшее к десяти 11. Если оба числа на равной длине к 10, то вывести на экран любое из них.
Подсказка: используйте метод public static int abs(int a), который возвращает абсолютную величину числа.
*/
Итак, есть метод main, который вызывает метод closeToten, в который мы уже передаём два каких-то значения в надежде получить результат.

public static void main(String[] args)
{
closeToTen(8,11);
closeToTen(14,7);
}


Давай подумаем, как мы вообще определяем, какое число ближе к десятке? 8 или 11, какое ближе? Да просто же. Десять минус 8. Десять минус 11. В первом случае получается 2 и во втором - 1.

Казалось бы осталось сравнить значения, НО!мы должны сравнить индексы значений, то есть игнорировать минус. Иначе решения будут не правильными. Для этого нам и нужен метод abs.

public static int abs(int a)
{
if (a < 0) {
return -a;
} else {
return a;
}

}


В него мы передаём значение (например минус 1). Если мы передали минус 1, какое значение будет в a? Ответ: - (-1), а минус на минус даёт плюс! Вот мы и сравним индексы без отрицательных знаков. Таким образом решение будет примерно таким:

public class Test2 {
public static void main(String[] args)
{
closeToTen(8,11);
closeToTen(14,7);
}

public static void closeToTen(int a, int b)
{
//::CODE:

int c = 10 - a;

int d = 10 - b;

if (abs(c) < abs(d)){
System.out.println(a);

} else {
System.out.println(b);
}

}

public static int abs(int a)
{
if (a < 0) {
return -a;
} else {
return a;
}

}

}
"Вы считаете, что учитель слишком требователен? Подождите, когда станете начальником вы." Уильям Генри Гейтс III

Аватара пользователя
Maksim Sergeevich
Администратор
Сообщения: 200
Зарегистрирован: 08 дек 2013, 21:19
Откуда: Гусев
Контактная информация:

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Maksim Sergeevich » 26 ноя 2016, 20:07

По второй задаче отпишусь чуть позже - немного занят-с.
"Вы считаете, что учитель слишком требователен? Подождите, когда станете начальником вы." Уильям Генри Гейтс III

Аватара пользователя
Maksim Sergeevich
Администратор
Сообщения: 200
Зарегистрирован: 08 дек 2013, 21:19
Откуда: Гусев
Контактная информация:

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Maksim Sergeevich » 27 ноя 2016, 00:44

Что касается второй задачи:

/* 10 процентов
Реализуйте метод addTenPercent, который увеличивает переданное целое число на 10%.
Исправьте ошибку в сигнатуре метода.
Подсказка: подумайте, какие у этого метода входные и выходные данные.
*/
public class Solution
{
public static void addTenPercent(int i) {
//напишите тут ваш код
}

public static void main(String[] args) {
System.out.println(addTenPercent(10));
}
}

То есть существует метод main, который вызывает метод addTenPercent и передаёт ему какое-то числовое (int) значение, в нашем случае число 10.

Вспомним как узнать процент от числа? Нужный процент разделить на 100 и умножить на число.

То есть: 10 * 10 / 100 . Получится единица. Потом мы должны увеличить на 10 процентов. То есть эту единицу прибавить к 10. Как это будет выглядеть в методе addTenPercent(int i)? Очень просто.

int percent = i * 10 / 100;

i = i + percent;


Мы создали переменную percent типа int, которая равна значению, переданному в наш метод addTenPercent (то есть переменная i типа int) умноженное на значение, полученное от частного. Таким образом мы узнали 10 процентов от числа.
Далее переменная i равно значению самой себе плюс значение percent 10 процентов от числа.

Какая же ошибка в сигнатуре метода? Метод должен вернуть значение i. Значит в методе будет ключевое слово return. Стало быть вместо ключевого слово void - мы должны указать тип метода, в нашем случае int.

public static int addTenPercent(int i) {
//напишите тут ваш код


int percent = i * 10 / 100;

i = i + percent;

return i;
}


Полностью будет выглядеть как-то так:

public class Test2 {

public static int addTenPercent(int i) {
//напишите тут ваш код
int percent = i * 10 / 100;

i = i + percent;

return i;
}

public static void main(String[] args) {
System.out.println(addTenPercent(10));
}

}
"Вы считаете, что учитель слишком требователен? Подождите, когда станете начальником вы." Уильям Генри Гейтс III

Anastasiya Fevraleva
Сообщения: 22
Зарегистрирован: 22 окт 2016, 21:51

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Anastasiya Fevraleva » 11 дек 2016, 00:49

package com.javarush.test.level04.lesson06.task03;

/* Сортировка трех чисел
Ввести с клавиатуры три числа, и вывести их в порядке убывания.
*/

import java.io.*;

public class Solution
{
public static void main(String[] args) throws Exception
{
//напишите тут ваш код

}
}

Аватара пользователя
Maksim Sergeevich
Администратор
Сообщения: 200
Зарегистрирован: 08 дек 2013, 21:19
Откуда: Гусев
Контактная информация:

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Maksim Sergeevich » 11 дек 2016, 14:03

Для ввода данных с клавиатуры используется System.in. Но System.in позволяет считать с клавиатуры только коды символов. Чтобы обойти эту проблему и считывать большие порции данных за один раз, мы будем использовать более сложную конструкцию:

InputStream inputStream = System.in;
Reader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);


Чтобы считать строку с клавиатуры, можно использовать объект BufferedReader. Но для этого в него нужно передать объект, из которого он будет вычитывать данные – System.in.

Однако System.in и BufferedReader не совместимы друг с другом, поэтому следует использовать переходник – еще один объект InputStreamReader.

Проще можно записать так одной строкой:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));


Хорошо поток запущен, далее у нас три числа, которые мы должны ввести, создадим три переменных типа int (число) и укажем им значения, которые мы введём с клавиатуры, то есть:
int a = Integer.parseInt(reader.readLine());

int b = Integer.parseInt(reader.readLine());

int c = Integer.parseInt(reader.readLine());

А дальше простые условные циклы сравнений чисел - если а меньше б и меньше с, да ещё при этом б меньше c, то...

if (a < b && a < c && b < c) {

System.out.println(a);
System.out.println(b);
System.out.println(c);

} else if (b < a && b < c && a < c) {
System.out.println(b);
System.out.println(a);
System.out.println(c);

} else if (c < a && c < b && a < b){

System.out.println(c);
System.out.println(a);
System.out.println(b);
} else if (c < a && c < b && b < a){

System.out.println(c);
System.out.println(b);
System.out.println(a);
}



Таким образом весь код выглядеть будет как-то так:

package test2;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Test2 {

public static void main(String[] args) throws Exception
{
//напишите тут ваш код

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

int a = Integer.parseInt(reader.readLine());

int b = Integer.parseInt(reader.readLine());

int c = Integer.parseInt(reader.readLine());

if (a < b && a < c && b < c) {

System.out.println(a);
System.out.println(b);
System.out.println(c);

} else if (b < a && b < c && a < c) {
System.out.println(b);
System.out.println(a);
System.out.println(c);

} else if (c < a && c < b && a < b){

System.out.println(c);
System.out.println(a);
System.out.println(b);
} else if (c < a && c < b && b < a){

System.out.println(c);
System.out.println(b);
System.out.println(a);
}
}
}


Про сайт напишу чуть позже, вчера в конторе одной просидел в качестве эксперта - не занимался, а сейчас над одной подработкой вкалываю.
"Вы считаете, что учитель слишком требователен? Подождите, когда станете начальником вы." Уильям Генри Гейтс III

Anastasiya Fevraleva
Сообщения: 22
Зарегистрирован: 22 окт 2016, 21:51

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Anastasiya Fevraleva » 14 дек 2016, 00:28

package com.javarush.test.level04.lesson04.task09;

/* Светофор
Работа светофора для пешеходов запрограммирована следующим образом: в начале каждого часа в течение трех минут горит зеленый сигнал,
затем в течение одной минуты — желтый, а потом в течение одной минуты — красный, затем опять зеленый горит три минуты и т. д.
Ввести с клавиатуры вещественное число t, означающее время в минутах, прошедшее с начала очередного часа.
Определить, сигнал какого цвета горит для пешеходов в этот момент.
Результат вывести на экран в следующем виде:
"зеленый" - если горит зеленый цвет, "желтый" - если горит желтый цвет, "красный" - если горит красный цвет.
Пример для числа 2.5:
зеленый
Пример для числа 3:
желтый
Пример для числа 4:
красный
Пример для числа 5:
зеленый
*/

import java.io.*;

public class Solution
{
public static void main(String[] args) throws Exception
{

Аватара пользователя
Maksim Sergeevich
Администратор
Сообщения: 200
Зарегистрирован: 08 дек 2013, 21:19
Откуда: Гусев
Контактная информация:

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Maksim Sergeevich » 14 дек 2016, 23:52

Надо копать в сторону арифметического оператора %. % делит левый операнд на правый операнд и возвращает остаток. По остатку от деления можно найти в какой промежуток времени мы находимся... Чуть позже опишу решение. Занят пока.
"Вы считаете, что учитель слишком требователен? Подождите, когда станете начальником вы." Уильям Генри Гейтс III

Аватара пользователя
Maksim Sergeevich
Администратор
Сообщения: 200
Зарегистрирован: 08 дек 2013, 21:19
Откуда: Гусев
Контактная информация:

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Maksim Sergeevich » 19 дек 2016, 20:34

Думаю как-то так. Подробнее мы сегодня обсудили на перемене. Но если есть вопросы - могу расписать.


public class Test2 {

public static void main(String[] args) throws Exception
{
//напишите тут ваш код

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

double time = Integer.parseInt(reader.readLine());

if((time%5>=0)&&(time%5<3))
System.out.println("зеленый");
if((time%5<4)&&(time%5>=3))
System.out.println("желтый");
if((time%5<5)&&(time%5>=4))
System.out.println("красный");
}
}
"Вы считаете, что учитель слишком требователен? Подождите, когда станете начальником вы." Уильям Генри Гейтс III

Anastasiya Fevraleva
Сообщения: 22
Зарегистрирован: 22 окт 2016, 21:51

Re: Помощь в решении задачек javarush (до 10 уровня)

Сообщение Anastasiya Fevraleva » 31 дек 2016, 22:36

С наступающим Новым Годом.Удачи здоровья

Ответить