Някой да е решил The Song of the wheels ?
Песента на колелетата
Прапраправнукът на Сали Яшар е получил наследство - сейф с парола - четири цифри. В него е заключена тайната на пеещите каруци. Той има автосервиз и се нуждае от реклама, затова е решил да направи такава каруца. Проблема е, че паролата е скрита в следната задача:
„Парола ще получиш, ако знаеш едно цяло число, контролна стойност се нарича то,
почива в интервала от 4 до 144 включително, но да го откриеш може би ще е мъчително. ”
Паролата има формат: „abcd“ и контролната стойност трябва да е равна на a*b + c*d , но трябва да бъдат спазени следните условия:
при намирането на а и b: a < b
при намиране на c и d: c > d .
Каруцата има четири колела, затова паролата ще е четвърто число, което трябва да се отпечата.
В случай, че НЕ се намери такова число, отпечатва се „No!“.
Вход
От конзолата се четe едно цяло число (контролната стойност): M – цяло число в интервала [4 … 144];
Изход
Отпечатването на конзолата зависи от резултата:
Ако са намерени четворки числа (аbcd), отговарящи на условието, ги отпечатваме всичките с разделител интервал: “{а}{b}{c}{d} ”
Отпечатва се един от двата реда на нов ред:
Ако съществува четвърта четворка се отпечатва: „Password: {а}{b}{c}{d}“
Ако НЕ са намерени такива числа или няма четвърта четворка отпечатваме: “No!”
Примерен вход и изход
Вход Изход Обяснения
11
1291 1342 1381 1471 1532 1561 1651 1741 1831 1921 2351 2431
Password: 1471 Започваме да проверяваме числата последователно:
{1} {1} {1} {1}; {1} {1} {1} {2}; {1} {1} {1} {3}; …; {1} {2} {9} {1}; …
четворката 1291 спазва условието и отпечатваме и т.н.
Вход Изход Вход Изход Вход Изход
139 No! 110
6987 7896
No! 55
1786 2595 3585 3974 4575 4793 5754 5853 5952 6871
Password: 3974
Аз съм използвала булева променлива, която да запомни дали сме на четвъртото число. Нея можем да я изкараме извън цикъла и така ще имаме работеща if-проверка извън цикъла.
И също съм сложила друга int променлива, която да помни четвъртата парола password = 1000 * a + 100 * b + 10 * c + d; (взимаме хилядните, стотните, десетиците и единиците).
Ето ми решението https://pastebin.com/QgTDcQbM
Сигурно има и по-добри решения, но това работи.
И не забравяй else, което да изписва "No!".
ПЕСЕНТА НА КОЛЕЛЕТАТА –PASS ot CTR==4
Scanner scanner=new Scanner(System.in);
int num=Integer.parseInt(scanner.nextLine());
int a=0;
int b=0;
int c=0;
int d=0;
int ctr=0;
for(int i=1;i<=num;i++)
for(int j=1;j<=num;j++)
for(int k=1;k<=num;k++)
for(int l=1;l<=num;l++){
System.out.printf("%s%s%s%s ",i,j,k,l);
System.out.println();
ctr++;
if(ctr==4){
a=i;
b=j;
c=k;
d=l;
}
}
if(ctr>=4){
System.out.printf("PASS IS %s%s%s%s ",a,b,c,d);
}else{
System.out.println("Nqma PASS ");
}
}
}
Здравей,
това е моето решение:
https://pastebin.com/BjhC53Mu
Създавам променлива rightNumber: брояч за числото, което отговаря на условията.
След това на всеки цикъл, смятам колко е сборът на 1-то и 2-то число и на 3-то и 4-то както и на 4-те числа заедно.
После проверявам кога отговарят и на 2-те условия и дали има 4-то такова.
if (control == sum && i < i2 && i3 > i4)
{
rightNumber++;
Console.Write("{0}{1}{2}{3} ", i, i2, i3, i4);
if (rightNumber == 4)
{
password = string.Format("{0}{1}{2}{3}", i, i2, i3, i4);
}
}