2015-06-13 3 views
0

Так что я пытаюсь решить эту проблему:Динамически Запись в список

Вам дано число п и 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

+3

Вы никогда не задавали нам вопрос, какую проблему вы с ? –

+0

Вы можете использовать LINQ? – dotctor

+0

, когда я пытаюсь вставить значения, я получаю System.ArgumentOutOfRangeException и указывает на строку 21 как проблему –

ответ

2

когда вы пишете

List<string> stringOfNumbers = new List<string>(2*n); 

вы создаете новый пустой список, которые имеют нулевой элемент но имеют начальную емкость, связанную из 2 * п. Это означает, что хранит память для вставки 2 * n элементов, но у нее нет.

stringOfNumbers[i] = Console.ReadLine(); 

Здесь вы пытаетесь получить доступ к элементам своего списка, которые вызывают исключение, потому что в вашем списке нет элемента. вы должны использовать вместо

stringOfNumbers.Add(Console.ReadLine()); 
+0

Спасибо, это было именно то, что мне нужно! –

0

Ты путаешь путь к динамическому списку добавляются элементы и у Вас есть ошибка в экземпляре этого списка

Смежные вопросы