06. Number Generator
Може ли малко помощ за тази задача защото не разбирам къде ми е грешката, а джъдж ми дава 40/100. :)
Може ли малко помощ за тази задача защото не разбирам къде ми е грешката, а джъдж ми дава 40/100. :)
А може ли условието!
Направо бих написал
int num = M * 100 + N * 10 + L;
но това не е проблемът.
В условието пише "Ако завършва на 5 – от специалното число се вади 2;"
Твоята проверка е само дали се дели на 5. На 5 се делият и числата, завършващи на 0. Следователно за да се получат само числата, които завършват на 5 трябва да е изпълнено следното условие:
num % 5 == 0 && num % 10 != 0
Ето ти направо едно решение да си имаш за всеки случай https://pastebin.com/UWc3VZfx
Здравей,
Изпращам моето решение на задачата с while-цикъл. То е на Java, но това не е спъващо. Според мен трябва да поставиш ограничения за формата на всяко ново генерирано число, а не да се генерират всички числа от MNL до 111. Там е въпросът. Доста приятна задача. С for-цикъл е, може би, по-лесно. Аз първоначално я бях решил с for-цикъл и много ти благодаря, че ни подсещаш да потърсим решение и с while-цикъл.
Поздрави
import java.util.Scanner;
public class TestForumQuestionNumberGeneration {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
int o = Integer.parseInt(console.nextLine());
int p = Integer.parseInt(console.nextLine());
int q = Integer.parseInt(console.nextLine());
int specialNumber = Integer.parseInt(console.nextLine());
int controlNumber = Integer.parseInt(console.nextLine());
int n = o;
int m = p;
int l = q;
int number = n * 100 + m * 10 + l;
int counter = 111;
while (number >= 111) {
if (specialNumber >= controlNumber) {
break;
}
if (number % 3 == 0) {
specialNumber += 5;
} else if (number % 5 == 0) {
specialNumber -= 2;
} else if (number % 2 == 0) {
specialNumber *= 2;
}
l--;
if (l == 0) {
l = q;
m--;
if (m == 0) {
m = p;
n--;
}
}
number = n * 100 + m * 10 + l;
}
if (specialNumber >= controlNumber) {
System.out.printf("Yes! Control number was reached! " +
"Current special number is %d.", specialNumber);
} else {
System.out.printf("No! %d " +
"is the last reached special number.", specialNumber);
}
}
}
Да, на мен там ми беше проблема, че ми генерираше всички числа от MNL до 111. "генерира всички числа в диапазона от MNL до 111. " - тази част ме обърка малко. Иначе хубава задача, да.
Задача 6. Генератор на числа
Да се напише програма, която прочита от конзолата три цели числа – M, N и L, и генерира всички числа в диапазона от MNL до 111. От конзолата се чете едно специално и едно контролно число. За всяка комбинация от тройката числа се прави проверка:
Трябва да се има предвид, едно число може да отговаря на повече от една проверка. В такъв случай трябва да се гледа приоритетът на операциите. Първо дали се дели на 3, после дали завършва на 5 и накрая дали е четно числото. Например:
972 се дели на 3 и е четно. В такъв случай изпълняваме само операцията с най-голям приоритет и към специалното число добавяме 5, но НЕ го умножаваме по 2 след това.
315 се дели на 3 и завършва на 5. Към специалното число добавяме 5.
В случай, че не отговаря на нито една от посочените проверки, НЕ се извършва операция и програмата продължава. Ако специалното число стане равно или по-голямо от контролното програмата приключва.
Вход
От конзолата се четат 5 числа, всяко на отделен ред:
Изход
Отпечатването на конзолата зависи от резултата:
Примерен вход и изход
Вход
Изход
Обяснения
9
7
3
2
44
Yes! Control number was reached! Current special number is 48.
973 – не се дели на 3, не завършва на 5 и не е четно => върху него не се извършват никакви операции. Специалното число е по-малко от контролното и програмата продължава.
972 - дели се на 3 => 2 + 5 = 7. Специалното число е по-малко от контролното и програмата продължава.
971 – не отговаря на условията и не се извършват операции
963 - дели се на 3 => 7 + 5 = 12
962 - четно => 12 * 2 = 24
961 - не отговаря на условията и не се извършват операции
…
952 - четно => 24 * 2 = 48
48 >= 44
Вход
Изход
Обяснения
1
1
7
1
308
No! 35 is the last reached special number.
117 - дели се на 3 => 1 + 5 = 6
116 - четно => 6 * 2 = 12
115 - завършва на 5 => 12 – 2 = 10
114 - дели се на 3 => 10 + 5 = 15
113 - не отговаря на нито една проверка и програмата продължава
112 - четно => 15 * 2 = 30
111 - дели се на 3 => 30 + 5 = 35
35 < 308
Предполагам, че защото превърташ през всички възможни комбинации от 0-9 за всяко число. Ако получиш число 5, 7, 4 например. Индивидуалните числа не трябва да надминават оригиналната им стойност. Например, ако започнем да проверяваме комбинациите 574, 573, 572, 571, 570 , и после не отиваш на 569 а на 564 . По същия начин и за предните две цифри.
Аз съм го направила с while цикъл с условие num >= 111 и няма пропускане на числа. :)