Так что я пытаюсь решить эту проблему:Динамически Запись в список
Вам дано число п и 2 * N чисел. Напишите программу для проверки , равна ли сумма нечетных чисел сумме четных чисел n . Первое число считается нечетным, следующее четное, следующее нечетным и т. Д. Печатать как результат «Да» или «Нет». В случае «да» напечатайте также сумму. В случае нет, напечатайте также разницу между нечетным и четными суммами.
Входной
Входные данные должны быть считаны с консоли.
• Первая строка содержит целое число n - количество чисел.
• Каждая из следующих строк 2 * n содержит ровно одно число.
Входные данные всегда будут действительными и в описанном формате. Там не нужно явно проверять его.
Выход
• Выход должен быть напечатан на консоли.
• Печать «Да, сумма = S», где S является суммой нечетных п чисел в случае суммы нечетных п чисел равна сумме четного п чисел.
• В противном случае напечатайте «Нет, diff = D», где D - разность между суммой нечетных n чисел и суммой четных n чисел. D должно всегда быть положительным числом. Ограничения
• Число n является целым числом в диапазоне [0 ... 500].
• Все остальные цифры являются целыми числами в диапазоне [-500 000 ... 500 000].
• Допустимое рабочее время для вашей программы: 0,25 секунды.
• Разрешено память:. 16 MB»
И мой текущий код, который компилирует это:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Odd_and_Even_Sum
{
class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
List<string> stringOfNumbers = new List<string>(2*n);
stringOfNumbers.DefaultIfEmpty();
List<int> listOfEvenNumbers = new List<int>(2*n);
List<int> listOfOddNumbers = new List<int>(2*n);
int diff = 0;
for (int i = 0; i < 2*n; i++)
{
stringOfNumbers[i] = Console.ReadLine();
}
List<int> listOfNumber = new List<int>() { 1, 2, 3 };
for (int i = 0; i < 2*n; i++)
{
listOfNumber[i] = int.Parse(stringOfNumbers[i]);
}
foreach (var item in listOfNumber)
{
if (IsEven(item))
{
listOfEvenNumbers.Add(item);
}
else
{
listOfOddNumbers.Add(item);
}
}
int sumOfEven = listOfEvenNumbers.Sum();
int sumOfOdd = listOfOddNumbers.Sum();
if (sumOfEven > sumOfOdd){
diff = sumOfEven - sumOfOdd;
}
if (sumOfEven < sumOfOdd){
diff = sumOfOdd - sumOfEven;
}
if (sumOfEven == sumOfOdd)
{
Console.WriteLine("Yes, sum ={0}", sumOfEven);
}
else
{
Console.WriteLine("No, diff={0}", diff);
}
}
public static bool IsEven(int n)
{
if (n % 2 == 0)
{
return true;
}
else
{
return false;
}
}
}
}
Мой код компиляции, но когда я вставляю входных значений я получаю это errror:
Необработанное исключение: System.ArgumentOutOfRangeException: Индекс был вне диапазона Должно быть неотрицательным и меньше. размер коллекции . Имя параметра: индекс в System.ThrowHelper.ThrowArgumentOutOfRangeException() в System.Collections.Generic.List`1.set_Item (индекс Int32, значение Т) при Odd_and_Even_Sum.Program.Main (String [] арг) в с: \ Users \ User1 \ Documents \ V isual Studio 2013 \ Projects \ Odd и Even Sum \ Program.CS: линия 21
Вы никогда не задавали нам вопрос, какую проблему вы с ? –
Вы можете использовать LINQ? – dotctor
, когда я пытаюсь вставить значения, я получаю System.ArgumentOutOfRangeException и указывает на строку 21 как проблему –