Loading...
luki_strike avatar luki_strike 9 Точки

Sample-Coding-Basics-Exam - Задача 2. Пренасяне на тухли

Всички входни числа са цели и в диапазона [11000].

using System;

class PrenasqneTuhli
{
    static void Main()
    {
        var x = int.Parse(Console.ReadLine());
        var w = int.Parse(Console.ReadLine());
        var m = int.Parse(Console.ReadLine());
        double move = 0;
        if (x >= 1 & x <= 1000 & w >= 1 & w <= 1000 & m >= 1 & m <= 1000)
        {
            if (x % (w * m) == 0)
            {
                move = x / (w * m);
            }
            else if (x % (w * m) != 0)
            {
                move = (x / (w * m)) + 1;
            }
            Console.WriteLine("Минималният брой курсове е: " + move);
        }
    }
}

Това е решението ми и в Тест 6 ми дава грешка и получавам 90 точки. След като махнах проверката на въведените числа дали са измежду 1 и 1000 както е по условие получих 100 точки. Това е гршка в judge системата или в условие е добавено неволно дизпазон в който варират числата. Благодаря!

1
Programming Basics 06/03/2016 20:22:54
Filkolev avatar Filkolev 4482 Точки

& е битов оператор, не логически. Ползвай &&.

Ограниченията на задачите не е нужно да се проверяват, те се слагат само за да те ориентират с какви данни работиш. В случая явно има разминаване, някоя стойност в този тест може да е 0 или по-голяма от 1000. 

2
luki_strike avatar luki_strike 9 Точки

Обаче в условието си е написано че "Всички входни числа са цели и в диапазона [1…1000].". Съмнява ме да е нула. По - скоро някое число е по голямо от 1000.

А това с & не ми е правило проблем. Досега задачите винаги са ми излизали. Въпреки че имаше на едно място пак малко разминаване с 1, но не помня вече къде беше.

0
06/03/2016 20:32:52
Filkolev avatar Filkolev 4482 Точки

Обикновено в условията се казва, че ограниченията не е нужно да се проверяват изрично. В това състезание го няма това описано, но по принцип може да го смяташ за чиста монета и да не го мислиш. В много редки случаи има значение за вярното решение на задачата дали в ограниченията нещо в сбъркано, стига да е ясно с какви типове се очаква да се работи. Има ли значение например за тази задача дали числата са до 1000 или до 10 000? 100 000? Не особено. Аз лично само веднъж се сблъсках с подобен проблем и той беше поради особеностите на езика, на който решавах задачата.

Относно операторите - не е правилно за логическа проверка да използваш оператор, който по принцип се разпознава от повечето програмисти като битов. Може и да работи, но просто не е коректно. Освен това не е ефикасно, понеже не се възползваш от т.нар. short-circuiting: https://en.wikipedia.org/wiki/Short-circuit_evaluation

1
06/03/2016 20:53:45
luki_strike avatar luki_strike 9 Точки

И каква е разликата дали ще сравня нули и едениците или ще търся true и false. Важното е да се стигне до правилното решение на задачата. А що се отнася до числата, има разлика 1 не е равно на 1000. Все едно да ти предложа заплата 100 000 на месец и ти да приемеш и аз да ти плащам по 100 лева на месец. Все е сто. А в програмирането това са различни типове данни.

Тип данни

Стойност по подразбиране

Минимална стойност

Максимална стойност

sbyte

0

-128

127

byte

0

0

255

short

0

-32768

32767

ushort

0

0

65535

int

0

-2147483648

2147483647

uint

0u

0

4294967295

long

0L

-9223372036854775808

9223372036854775807

ulong

0u

0

18446744073709551615

float

0.0f

±1.5×10-45

±3.4×1038

double

0.0d

±5.0×10-324

±1.7×10308

decimal

0.0m

±1.0×10-28

±7.9×1028

-4
KOSTADINMARKOV avatar KOSTADINMARKOV 22 Точки

Точно така макар и да си преличат много логическото и побитовото && , те вършат различна работа,но ако изключим тази грешка си започнал добре и ако я качиш в джъджа ще имаш 100 точки

0
WifiAvivi avatar WifiAvivi 151 Точки

Тази задача ми счупи главата, докато си намеря "грешката". Наистина Test #6 е с 0 (нула).

Как може да се уверите в това? Ами просто въведете този код в judge-a:

using System;
class JudgeTest6
{
    static void Main()
    {
        Console.WriteLine(0);
    }
}

Явно има някакъв бъг, защото 0 (нула) не може да се получи като изход съгласно условието - всички входни числа са цели и в диапазона [11000]). Следователно винаги ще има поне една тухла / работник / вместимост като вход, което значи и най-малко поне един курс като изход.

2
05/06/2016 22:19:50
rado84 avatar rado84 1 Точки

Не знам дали има тест с 0, но на мен ми я даде от първия път.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MovingTiles
{
    class Program
    {
        static void Main(string[] args)
        {
            double bricks = double.Parse(Console.ReadLine());
            double workers = double.Parse(Console.ReadLine());
            double carts = double.Parse(Console.ReadLine());

            double courses = bricks / (workers * carts);
            Console.WriteLine(Math.Ceiling(courses));
        }
    }
}

Единствената уловка в тая задача е, че променливите или трябва всичките да са дабъл, или да кастваш от един тип в друг. Защото при един от примерните входове се получават 11 цяло и нещо курсове (плаваща запетая). И понеже няма как да направиш половин курс с количка, това си се брои за отделен курс.

 

П.С. Не гледайте, че името е MovingTiles. Преди това бях решавал "поправка на плочки" и явно съм си мислел за предишната задача, докато пиша името. А сега не знам как да преименувам проекта без той да се счупи.

-1
06/06/2016 03:48:16
WifiAvivi avatar WifiAvivi 151 Точки

Прав си за уловката. Името на задачата е 02. Bricks . Иначе, пусни този код в judge:

using System;
class JudgeTest6
{
    static void Main()
    {
        Console.WriteLine(0);
    }
}

 

0
06/06/2016 11:50:43
rado84 avatar rado84 1 Точки

Да, номер 6 го изкара с верен отговор. Явно, че освен предварително зададените входове, Judge ползва и RNG (Random Number Generator; който знае какво е WOT, знае и какво е RNG). Иначе не виждам откъде ще се вземе тази нула.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.