Домашно - 1000 Days After Birth!
Това е кода който успях да направя . Работи , като напиша дата ми смята 1000 дена след това , но ми дава грешка в judge системата . Ако някой може да помогне или да даде съвет .. ? :)
http://pastebin.com/Cv3xV3tt
Това е кода който успях да направя . Работи , като напиша дата ми смята 1000 дена след това , но ми дава грешка в judge системата . Ако някой може да помогне или да даде съвет .. ? :)
http://pastebin.com/Cv3xV3tt
И аз я реших, но по по-различен начин и на мен ми гръмна в judge, въпреки че примерите от word файла ми излязоха всички, точно така както са написани. И аз не знам какъв е проблемът. Даде ми едва 20 точки
Вероятно при парсването на датата се получават проблеми. Това, което е най-сигурно да се ползва, когато се знае точният формат, в който се подава датата, е DateTime.ParseExact() метода. Разгледай го как работи; би трябвало да ти свърши работа.
Ето и моето решение което във VS си работи , но в judge също гърми !
using System;
class Class1
{
public static void Main()
{
DateTime today = DateTime.Now;
DateTime date = System.DateTime.Parse(Console.ReadLine());
DateTime result = date.AddDays(1000);
Console.WriteLine("{0:dd-MM-yyyy}" , result);
Може ли някой да ми помогне да разбера защо гърми в judje-а , понеже също съм онлайн и немога да разбера къде бъркам . Благодаря Ви предварително!
}
}
Трябва да се добавят 999 дена,а не 1000 ! :)
Мисля,че трябва да промениш от 1000 на 999 дни.
Подобно е на твоето, но в judge не става. Едва 20/100. Някакви идеи защо?
using System;
namespace _1000_days_after_birth
{
class Program
{
static void Main(string[] args)
{
DateTime date = DateTime.Parse(Console.ReadLine());
DateTime result = date.AddDays(999);
Console.WriteLine("{0:dd-MM-yyyy}", result);
}
}
}
В док файла има подсказки как се решава, защо не ги ползвате ?
* Подсказки: потърсете информация за типа DateTime в C# и по-конкретно разгледайте методите ParseExact(str, format), AddDays(count) и ToString(format). С тяхна помощ може да решите задачата, без да е необходимо да изчислявате дни, месеци и високосни години.
Подсказката е пак "задача" да си намерим сами кодовете , понеже съм записан в онлайн обучението , ми е доста по-трудно . Поразрових се в гугъл и stack overflow , но освен още въпроси , аз отговор не намерих . Ако някой може да ми каже какво точно да напиша след ParseExact .. пробвах няколко варианта , като например : DateTime.ParseExact("25-02-1995", "M'/'d'/'yyyy", null); / DateTime.TryParseExact("12122008", "ddMMyyyy", null, System.Globalization.DateTimeStyles.None, out dt); . Дава ми няколко грешки , като една от тях , разликата от моя отговор с верния отговор е 1 ден , има грешка с разлика от 4 месеца и тн. Моля за по-обширен и обяснен отговор , все пак съм нов в програмирането .
Поздрави !
Подсказките са много на място, дори ясно са казани методите, които трябва да се ползват. В MSDN, където е официалната документация, обикновено има достатъчно информация и примери. Ако не ти се чете самата документация може да разгледаш само примерите: ЛИНК
Понякога е по-добре да се чете документацията, защото в StackOverflow пишат хора с конкретни проблеми, които търсят конкретни отговори, а не питат общи неща като как да ползват ParseExact метода. Това обикновено са хора, които са чели документацията, и не са намерили решение на казуса си.
Доколкото виждам си близо до истината, с примерите в MSDN би трябвало да се справиш със задачата. Добър вариант е да ползваш дебъгера. Така може да видиш на всяка стъпка какво се случва - първо да видиш дали парсваш правилно датата, след това дали правилно добавяш дни. Проблемът най-вероятно е в първата стъпка, във вградения метод за добавяне на дни няма какво да се обърка.
http://www.dotnetperls.com/datetime-parse
към края ще видиш какво му трябва на кратко :
очаква стринг който искаш да Parsnesh,
по какъв начин (в нашия случай "dd-MM-yyyy")
и културе инфо : https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.110).aspx
Ето моето решение. Работи в judge системата. Само неразбрах прибавянето на дните ми даваше грешка. Разминаваха се с 1 ден и затова ги намалих. Онлайн се обучавам и подсказките са полезни много. Иска се малко ровене за да намериш отговорите. Лошото беше че отговирите ги намирах в кодове от https://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx
using System;
class ThousandDayAfter
{
static void Main()
{
string ftm = "dd-MM-yyyy";
string value = Console.ReadLine();
DateTime userBirthday = DateTime.ParseExact(value, ftm, null);
Console.WriteLine(userBirthday.AddDays(999).ToString("dd-MM-yyyy"));
}
}
Да и при мен се разминаваха с един ден, но това е поправимо. Само не разбрах кое му е лошото, че си намерил отговорите в msdn ?
То нали това е целта. В смисъл като не знаеш нещо търсиш информация в google. Msdn е библиотеката на майкрософт и там много неща са
описани добре и подробно. Направено е да видиш наистина как работят нещата, докато при stack overflow повече се търси за специфичен проблем.
Така че аз не виждам нищо лошо, че си намерил отговори в msdn. И аз намирам много неща там.
Лощото е че трябва да следиш много подробно кода, особено когато не си специалист по английски език. Иначе с другото се справям.
Ами няма как приятелю. В смисъл , че английският е доста важен и вече дори се смята като даденост.
Дори в обявите за работа примерно няма да видиш , че се изисква английски. Той се подразбира, че
трябва да знаеш поне на ниво, с което да се оправяш. Поне така си мисля. Но пък при желание винаги може да се понаучи и той :)
След осъждането на ParseExact дали не е редно да коментираме защо judge-a проверява за 999 дни след дата на раждане, а не 1000, както е в условието?
Ето го моето решение и работи в judge.Дано помогне, на който се нуждае:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
namespace ThousandDays
{
class ThousandDays
{
static void Main(string[] args)
{
string dateString = Console.ReadLine();
string format= "dd-MM-yyyy";
DateTime result=DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime output = Convert.ToDateTime(result).AddDays(999);
Console.WriteLine(output.ToString("dd-MM-yyyy"));
}
}
}
1000 дни след въведаната дата във формат dd-MM-yyyy (забележи - не си въвел час) започва от 12:00:00АМ тоест на следващият ден. Представи си го като една линия, и показалеца ти е забит на датата ама накрая й. Добави 1000 дни, и ще се телепортираш в същия този ден 1000 дни след това, но 1001 вече започнал. Това е моето лично обяснение на пръв поглед, но не съм го проверявал ;)
What? :)
Т.е. ако добавиш един ден, ще се телепортираш на следващия ден, но в 12:00 АМ демек на по-следващия ден, т.е. 2 дни по-късно? :) Is that true?
Пробвай с AddDays(1). При вход 20-01-2015 връща 21-01-2015. Ако те разбирам правилно очакваме да върне 22ри? :)
Моята логика е подобна. Ако днес се навършват х дни от рождението ми утре ще се навършват х+1. Понеже 1 ден се навършва на деня след рождения ми ден => 1000 са точно +1000, а не +999 или +1001 или +1002.
Ето го моето решение тук: http://pastebin.com/zYyU2PT3
Мисля, че е оптималното.
ей, браво, много стегнат код, моя се получи нещо такова, само че вместо CultureInfo provider = CultureInfo.InvariantCulture; написах var provider = new CultureInfo("bg-BG"); което не знам всъщност каква роля играе, тъй като и без това формата е зададен от format. И за да изчистиш повече кода, може да махнеш на последния ред placeholder-а {0} и да си остане само date.ToString(format)
Колеги:
Говорихме си и пак си говорихме.После пак си говорихме и т.н. :)))
А в условието пише от въведената дата.Затова с 1000 не излиза правилен отговор.Едно е самата въведена дата.
Измислих го :))))
Аз го реших така : http://pastebin.com/f2Vmhykj
Мисля, че е доста оптимално.
Някъде по-горе съм драснал моето обяснение (колапснато е в стак с коментари), и според мен просто дадените отговри са грешни, или заданието е непълно. Това е моето обяснение.
Не съм си мислил, че може да бъде толкова кратко, но вземайки предвид подсказките и търсене в Google, се получи следният код.http://pastebin.com/pRpvVkmn
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
Не разбирам защо пишеш този код в края на задачата, ако не знаеш, с Ctrl-F5 ти изпълнява програмата и не затваря конзолата.
Когато сложиш тоя код в judge, гърми.
Ето го и моето решение на един ред
using System;
using System.Globalization;
class _1000DaysAfterBirth
{
static void Main()
{
Console.WriteLine(DateTime.ParseExact(Console.ReadLine(), "dd-MM-yyyy", CultureInfo.InvariantCulture).AddDays(999).ToString("dd-MM-yyyy"));
}
}
ей това успях да направя и работи, извинявам се ако спамя излишно
using System;
using System.Globalization;
namespace _1000DaysAfterBirth
{
class Program
{
static void Main(string[] args)
{
string DateString = Console.ReadLine();
string format="dd-MM-yyyy";
DateTime result = DateTime.ParseExact(DateString, format,CultureInfo.InvariantCulture);
DateTime answer = result.AddDays(999);
Console.WriteLine( answer.ToString(format));
}
}
}
За да не гърми кода в Judge при включен Console.ReadKey() последния може да се "загради" по следният начин:
#if DEBUG
Console.ReadKey(true);
#endif