Sample-Coding-Basics-Exam - Задача 2. Пренасяне на тухли
Всички входни числа са цели и в диапазона [1…1000].
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…1000].". Съмнява ме да е нула. По - скоро някое число е по голямо от 1000.
А това с & не ми е правило проблем. Досега задачите винаги са ми излизали. Въпреки че имаше на едно място пак малко разминаване с 1, но не помня вече къде беше.
Обикновено в условията се казва, че ограниченията не е нужно да се проверяват изрично. В това състезание го няма това описано, но по принцип може да го смяташ за чиста монета и да не го мислиш. В много редки случаи има значение за вярното решение на задачата дали в ограниченията нещо в сбъркано, стига да е ясно с какви типове се очаква да се работи. Има ли значение например за тази задача дали числата са до 1000 или до 10 000? 100 000? Не особено. Аз лично само веднъж се сблъсках с подобен проблем и той беше поради особеностите на езика, на който решавах задачата.
Относно операторите - не е правилно за логическа проверка да използваш оператор, който по принцип се разпознава от повечето програмисти като битов. Може и да работи, но просто не е коректно. Освен това не е ефикасно, понеже не се възползваш от т.нар. short-circuiting: https://en.wikipedia.org/wiki/Short-circuit_evaluation
И каква е разликата дали ще сравня нули и едениците или ще търся 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