Софтуерно Инженерство
Loading...
+ Нов въпрос
cybera avatar cybera 1 Точки

Programming Basics - упражнения - 1000 Days After Birth

Условие:

Напишете програма, която въвежда рождена дата във формат “dd-MM-yyyy” и пресмята датата, на която се навършват 1000 дни от тази рождена дата и я отпечатва в същия формат.

вход

изход

25-02-1995

20-11-1997

07-11-2003

02-08-2006

30-12-2002

24-09-2005

01-01-2012

26-09-2014

14-06-1980

10-03-1983

* Подсказки: потърсете информация за типа DateTime в C# и по-конкретно разгледайте методите ParseExact(str, format), AddDays(count) и ToString(format). С тяхна помощ може да решите задачата, без да е необходимо да изчислявате дни, месеци и високосни години.

 

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

var birth = DateTime.ParseExact(Console.ReadLine(), "dd/MM/yyyy", null);

var answer = birth.AddDays(1000);

Console.WriteLine("{0:dd-MM-yyyy}", answer);

Всички примерни тестове при мен излизат с отклонение 1 ден напред. Единственото обяснение което съм измислил е че по някаква причина не се вземат в предвид високосните години, обаче в MSDN-а пише изрично че add.days взема в предвид въпросните високосни години.

Когато кача решението в джъджа ми дава 5 броя (общо 5 са тестовете):

Unhandled Exception: System.FormatException: String was not recognized as a valid DateTime.
   at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
   at _13._1000_Days_after_Birth.Program.Main(String[] args)

Някой може ли да отгатне какво недоразбирам за това как работи DateTime?

Тагове:
0
Programming Basics 11/10/2016 00:12:44
jivako000 avatar jivako000 295 Точки

Здравей!

Когато задаваш дните, не трябва да пишеш след 1000, а след 999!

Това е моето решение: http://pastebin.com/rNNSzLWd

А мога ли да погледна целия ти код?

Успех!smiley

0
10/10/2016 17:51:03
cybera avatar cybera 1 Точки

защо 999? ако си роден на 01.01.2000 г. на 02.01.2000 г ще си на 1 ден. Ако добавиш 999 дена няма да сметнеш кой ден ще е след 1000 дена, а кой ден ще е след 999, което не е условието на задачата. Друго яче казано 24 часа след раждането ти се навършва един ден не в момента в който си се родил. Смисъл ясно ми е че 999 ще докара верния резултат, ама не е това задачата :) ако смята правилно значи си мисля че някой е осрал отговорите.

Отделен въпрос, защо според тебе дава тея грешки, като пробвам решението в джъджа вместо да ми даде грешни отговори просто, както излизат при мен?

ЕДИТ: игнорирай 2рата част, разбрах че ясно този начин който съм ползвал за изписване не го приема в джъджа по някаква причина, въпреки че при мен излиза. Като го направих с toString излезнаха като грешни отговорите.

ЕДИТ2: тествах с 999 просто за чекчетата и по някаква причина все още дава грешка на тест 01-01-2012, няма нищо изписано от програмата ми.

0
10/10/2016 17:57:02
cybera avatar cybera 1 Точки
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _13._1000_Days_after_Birth
{
    class Program
    {
        static void Main(string[] args)
        {
            var birth = DateTime.ParseExact(Console.ReadLine(), "dd-MM-yyyy", null);

            var answer = birth.AddDays(999);

            Console.WriteLine(answer.ToString("dd-MM-yyyy"));
        }
    }
}

Така изглежда преди последния тест на който минават 4/5 теста, но на 01-01-2012 не ми излизат никакви данни.

ЕДИТ: Това вече е смешно пуснах го пак същото и този път минаха 5/5

еднакъв код:

https://judge.softuni.bg/Contests/Submissions/View/1888317 - 5/5

https://judge.softuni.bg/Contests/Submissions/View/1888248 - 4/5

0
10/10/2016 18:11:38
jivako000 avatar jivako000 295 Точки

Оправих ти кода - http://pastebin.com/Sa9pu1FN Дава 100/100

По неправилен начин беше зададен входа, тъй като трябваше да го инициализираш в отделна променлива в началото още!

Ако имаш още въпроси питай! smiley

0
dakata avatar dakata 26 Точки

Входа трябва да е в формат "dd-MM-yyyy":

using System;
using System.Globalization;

class Program
    {
        static void Main(string[] args)
        {
            var days = Console.ReadLine();
            string format = "dd-MM-yyyy";

            DateTime day = DateTime.ParseExact(days, format, CultureInfo.InvariantCulture);
            day = day.AddDays(1000 - 1);
            Console.WriteLine("{0:dd-MM-yyyy}", day);
        }
    }

 

0
cybera avatar cybera 1 Точки

Да благодарско, усетих се за това в един момент.

0