#c# #runtime-error #kattis
Вопрос:
Я новичок в Kattis и пытаюсь решить задачу Jumbo Javelin с помощью C#, но я получаю ошибку во время выполнения, даже если я выхожу из своей программы с 0.
Вот мой код:
using System;
namespace JumboJavelin
{
class Program
{
static void Main(string[] args)
{
int l = int.Parse(Console.ReadLine());
int sum = 0;
int loss = 1;
for (int n = 0; n <= 100; n )
{
sum = l;
if((n 1) % 2 == 0 amp;amp; !n.Equals(0))
{
sum -= ((n 1) / 2)*loss;
}
try
{
l = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
break;
}
}
Console.WriteLine(sum);
Environment.Exit(0);
}
}
}
Кто-нибудь, пожалуйста, может мне помочь? Я знаю, что мое решение в конечном итоге выдает неправильный ответ, но сейчас я пытаюсь избавиться от ошибки во время выполнения, так как она отлично работает в Visual Studio 2019.
Мы ценим любую помощь. Спасибо
Комментарии:
1. Содержит ли ошибка во время выполнения какие-либо сведения?
2. Является
Environment.Exit(0)
ли это необходимым? Глядя на страницу C# Kattis , там ничего не говорится о том, что это необходимо3. @devNull Нет, Каттис, похоже, не говорит, где ошибка и на что она жалуется.
Ответ №1:
Если вы измените ошибку, на которую вы поймали Exception
, вы увидите, что на самом деле это неправильный ответ, поэтому что-то идет не так. Вы действительно выходите из своей программы с кодом выхода 0
в нижней части кода, однако он выбрасывает Exception
где-то еще. Две вещи, которые следует учитывать:
- Во-первых, в постановке задачи объясняется, что в качестве первого ввода вы получаете целое число
N
(этоN
указывает на количество стальных стержней, которые у него есть) и МОЖЕТ НАХОДИТЬСЯ между1
и100
(1
следовательно, не включительно1<N<=100
). Теперь у вас есть цикл, который всегда зацикливается от1
до100
. И цикл должен повторяться1
до и включая любое значениеN
. Попробуйте посмотреть, что вы можете с этим поделать. - Во-вторых, вы считываете входные данные в «хвосте» цикла. Это означает, что после последнего цикла вы выполняете еще один ввод для чтения. И что вы не читаете первый л. Попробуйте изменить чтение входных данных для
l
в начале цикла. (и первый ввод, который вы читаете в своем основном, не должен быть дляl
(см. пункт 1)).
Посмотрите, как далеко это вас заведет, если что-то не ясно, пожалуйста, дайте мне знать.
Ответ №2:
Как указал Каспер, n
динамически предоставляется в первой строке; не думайте, что у вас есть 100 строк для сбора for (int n = 0; n <= 100; n )
.
Нет необходимости обрабатывать ошибки с форматом; Kattis всегда будет придерживаться указанного ими формата. Если что-то пойдет не так при анализе их ввода, нет смысла пытаться это уловить; вам решать, как исправить недоразумение. Лучше разбиться, а не ловить, чтобы вас не обманул Кэттис, сказавший вам, что сбой произошел из-за неправильного ответа.
Простой подход заключается в следующем:
- Соберите
n
данные из первой строки ввода; это преамбула - Цикл от 0 до
n
, собирая каждую строку - Суммируйте значения в строке в сумму
- Распечатайте
sum - n 1
формулу , которую вы можете получить из их образцов
using System;
class JumboJavelin
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
int sum = 0;
for (int i = 0; i < n; i )
{
sum = int.Parse(Console.ReadLine());
}
Console.WriteLine(sum - n 1);
}
}
Вы можете использовать этот шаблон для решения других проблем. Однако вы не всегда будете агрегировать один результат после n
строк ввода; иногда ввод представляет собой одну строку, или вам приходится печатать что-то для каждого тестового случая. Некоторые проблемы требуют, чтобы вы разделяли и анализировали каждую строку на разделителе.
Независимо от случая, сосредоточьтесь на чистом сборе входных данных в качестве отдельного шага от решения проблемы; объединяйте их только в том случае, если вы уверены, что сможете сделать это без путаницы, или если ваше решение превышает лимит времени, и вы уверены, что в противном случае оно правильное.