Софтуерно Инженерство
Loading...
Slavena_cholakova avatar Slavena_cholakova 8 Точки

Песента на колелетата - не отпечатвам четвъртата четворка

Условието е следното:

  • Песента на колелетата

Прапраправнукът на Сали Яшар е получил наследство - сейф с парола - четири цифри. В него е заключена тайната на пеещите каруци. Той има автосервиз и се нуждае от реклама, затова е решил да направи такава каруца. Проблема е, че паролата е скрита в следната задача:

Парола ще получиш, ако знаеш  едно цяло число, контролна стойност  се нарича то,

почива в интервала от 4 до 144 включително, но да го откриеш може би ще е мъчително. ”

Паролата има формат: "abcd" и контролната стойност трябва да е равна на  a*b + c*d , но трябва да бъдат спазени следните условия:

  • при намирането на а и b: a < b
  • при намиране на  c и d: c > d .

Каруцата  има четири колела, затова паролата ще е четвърто число, което трябва да се отпечата.

В случай, че НЕ се намери такова число,  отпечатва сеNo!“.

Вход

От конзолата се чете едно цяло число (контролната стойност): 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

 Моето решение е:

using System;
                   
public class Program
{
    public static void Main()
    {
        
      int numberA = 0;      
      int numberB = 0; 
      int numberC = 0;
      int numberD = 0;
      int count = 0;
      
            int numberControl = int.Parse(Console.ReadLine());
            for (numberA = 1; numberA <= 9; numberA++)
            {
            for (numberB = 0; numberB <= 9; numberB++)
            {
            for (numberC = 0; numberC <= 9; numberC++)
            {
            for (numberD = 0; numberD <= 9; numberD++)
            {
            if((numberControl == numberA * numberB + numberC * numberD) && ((numberA < numberB) && (numberC > numberD)))
            {
            Console.Write("{0}{1}{2}{3} "  ,numberA ,numberB, numberC, numberD);
            count = count + 1;
            }
            }
            }
            }
            }
            if (count == 4)
            {
            Console.Write("Password: {0}{1}{2}{3} "  ,numberA ,numberB, numberC, numberD);
            }    
        else 
        {
            Console.Write("No!");
}
        
    }
}

 

Дайте насоки къде бъркам и как да отпечатам четвъртата четворка. Благодаря предварително! 

 

Тагове:
knoteva avatar knoteva 984 Точки
Best Answer

Здравей,

Може да си направиш допълнителна променлива за нея. Има други неща, които не са ок в кода. Ето го коригиран с коментари:

https://pastebin.com/Au5rhKdh

0
mark79 avatar mark79 561 Точки

Здравейте,

само една оптимизация по кода, ако може да вметна, с цел да се въртят по-малко циклите

        for (numberA = 1; numberA <= 9; numberA++)
        {
            for (numberB = numberA + 1; numberB <= 9; numberB++) // A < B
            {
                for (numberC = 1; numberC <= 9; numberC++)
                {
                    for (numberD = 1; numberD <= numberC; numberD++) // C > D
                    {
                        if (numberControl == numberA * numberB + numberC * numberD)
                        {

Поздрави :)

0
12/08/2019 16:54:29
Slavena_cholakova avatar Slavena_cholakova 8 Точки

Много благодаря за корекциите и поясненията. Да спомена, че не използвам този начин за отпечатване  с $ , поради факта, че не използвам VS, a онлайн  платформата https://dotnetfiddle.net/ , която не го поддържа,  a от там и не мога да дебъгвам. 

1
13/08/2019 13:59:16
Slavena_cholakova avatar Slavena_cholakova 8 Точки

Добра идея за оптимизация! Благодаря, но все пак нещо не е както трябва, защото се променя коректния резултат.

0
13/08/2019 15:08:03
arcobaleno avatar arcobaleno 14 Точки

Ето ти друго решение, резултатите излизат: https://pastebin.com/zQenKvbe

0