19. * Thea the Photographer
Здравейте колеги.При така качена задачата в judge ми дава 70/100. И при проверка на изходните данние ми излизат коректни резултати,но 8,9 и 10 тест от judge ми дават грешен отговор.Може ли някои да ми подскаже къде изпускам нещо.Благодаря предватително :)
using System;
namespace _19.Thea_The_Photographer
{
class Program
{
static void Main(string[] args)
{
int countPictures = int.Parse(Console.ReadLine());
int filterTimeForOnePicture = int.Parse(Console.ReadLine());
int filterFactor = int.Parse(Console.ReadLine());
int uploadTime = int.Parse(Console.ReadLine());
double filterPicture = Math.Ceiling(countPictures * (filterFactor / 100.0));
double firstAnswer = countPictures * filterTimeForOnePicture;
double secondAnswer = filterPicture * uploadTime;
double answer = firstAnswer + secondAnswer;
TimeSpan time = TimeSpan.FromSeconds(answer);
string str = time.ToString(@"d\:hh\:mm\:ss");
Console.WriteLine(str);
}
}
}
По условие е дадено да се ползва int: The input will be in the described format, there is no need to check it explicitly. Ще пробва с ограничаване на входа.
Друг вариант е умноженията да се преобразуват към double.
http://pastebin.com/PHVarvhs
Имах предвид,че ако пробваш например само долната част от кода какво ще изведе с вход 1 000 000 и 100 000, трябва да се изведе 100 000 000 000,нали така?
using System;
namespace _19.Thea_The_Photographer
{
class Program
{
static void Main(string[] args)
{
int countPictures = int.Parse(Console.ReadLine());
int filterTimeForOnePicture = int.Parse(Console.ReadLine());
double firstAnswer = countPictures * filterTimeForOnePicture;
Console.WriteLine(firstAnswer);
}
}
}
а в случая връща друг резултат,защото int приема стойности от -2,147,483,648 до 2,147,483,647
Здравей,
По условие е зададено, че числата се побират в int, но искам да отбележа, че когато имаме умножение от сорта на 1 000 000 * 100 000 - това съвсем спокойно може да препълни този тип данни. :)
Поздрави!
Съгласна съм с другите, че в тази задача double се ползва единствено за изчислението на процента филтрирани снимки и веднага трябва да се преобразува в цяло число. Останалите променливи са цели числа. Аз лично приемам входа в променливи от тип int, защото по условие няма да го препълнят. После и аз имах грешка в изчисленията, като използвах тези int-ове, но запазвах отговора в long. Сега го промених и правя експлицитно конвертиране към long на всяка променлива в изчисленията и така няма грешки.
long filterTime = (long)allPictures * (long)filterTimePerPic;
var goodPictures = (int)Math.Ceiling(allPictures * filterFactor / 100d);
long uploadTime = (long)goodPictures * (long)uploadTimePerPic;
long totalTime = (long)filterTime + (long)uploadTime;
Помогнахте ми с вашите отговори да си намеря грешките, благодаря!