Я задавал некоторые вопросы по программированию на этом веб-сайте под названием Kattis. Вот ссылка на вопрос, который я задавал: https://open.kattis.com/problems/datum
Пока я пытался решить эту проблему, я обнаружил кое-что очень, очень, очень странное.
Прежде чем я начну, вот два кода:
Первый:
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
int main()
{
//a = day, b = month
string days[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
struct tm time;
cin >> time.tm_mday >> time.tm_mon;
time.tm_year = 2009-1900;
time.tm_mon--;
mktime(&time);
cout << days[time.tm_wday] << endl;
return 0;
}
Второй:
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
int main() {
//a = day, b = month
string days[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
tm time = {};
cin >> time.tm_mday >> time.tm_mon;
time.tm_year = 2009-1900;
time.tm_mon--;
mktime(&time);
cout << days[time.tm_wday] << endl;
return 0;
}
Это ТОЧНЫЙ ОДИНАКОВЫЙ код, за исключением того, что эти два кода различаются следующим образом:
struct tm time; // first code
против
tm time = {}; // second code
СЕЙЧАС, это то, что я нашел очень запутанным. Первый код и второй код дают одинаковый ответ на моей консоли. Я проверил тип результата (days[time.tm_wday]), выполнив также typeid(days[time.tm_wday]).name(), и оба ответа кажутся одинаковыми.
Однако при отправке на веб-сайт Kattis он принимает только второй и не принимает первый.
Теперь, может ли кто-нибудь сказать мне, что мне здесь не хватает? Почему он принимает только одно против другого? Большое спасибо!
РЕДАКТИРОВАТЬ: Немного информации о Каттисе: будет вопрос, который вам придется решить с помощью программирования. Затем он сверяет ваш ответ с их ответом. Если ваша программа выдает одинаковые ответы, она «принимает» ваше решение. Если отличается, то нет.
Например, допустим, вопрос состоит в том, чтобы вычислить площадь квадрата. Он дает пару примеров со значениями.
пример) Случай 1: (ввод: 5, вывод: 25).
Если ваша консоль выводит 25 при вводе 5, то она «принимает» ваше решение. Если он выводит какое-то случайное число, например 10, то он не принимается.
Дело в том, что моя программа выводит точно такие же значения:
Выходы первого кода: Четверг. Вывод второго кода: Четверг и т.д. Однако "правильным" считается только один.
tm
, поэтому вы получаете неопределенное поведение. - person user7860670   schedule 30.05.2018