Maximal K sum 0/100 :-?


0
using System;

class Program
{
    static void Main()
    {
        int input = int.Parse(Console.ReadLine());
        int k = int.Parse(Console.ReadLine());

        int[] array = new int[input];

        int help = 0;

        int help2 = 0;

        for (int i = 0; i < input; i++)
            array[i] = int.Parse(Console.ReadLine());

        for (int j = 0; j < k; j++)
        {
            for (int i = 0; i < input - 1; i++)
                if (array[i] > array[i + 1])
                    if (array[i] > help)
                        help = array[i];
                else if (array[i + 1] != 0)
                    help = array[i + 1];

            for (int i = 0; i < input; i++)
                if (array[i] == help)
                    array[i] = 0;

            help2 += help;
        }
        Console.WriteLine(help2);
    }
}



Отговори



0
Да не би да си объркал името на задачата, защото този код няма нищо общо с тази задача за която си писал че се отнася?

от geiff (457 точки)


1
Копирал съм грешен код, поправиг го :)

от cmdkick (120 точки)

1
Да ти кажа честно не мога да се оправя в твоя код, но аз следвах следната логика: първо сортирам масива в нарастваш ред и от края на масива до к ги сумирам, а може да го сортираш в обратен ред и от 0 до к да ги сумираш, но тъй като използвах вградения сорт направих първия вариант. Понеже в задачата се търси максималната сума, най големите ти елементи (след сортирането) ще са винаги в края(или началото) и просто въртиш цикъл к-на брои пъти.

от geiff (457 точки)



0

@cmdkick,

има следните проблеми

хубаво  е за всеки for да има къдрави скоби, същото важи и за if - овете - без къдрави скоби има голяма неяснота

например следното условие, което си написал

if (array[i] > array[i + 1])
if (array[i] > help)
help = array[i];
else if (array[i + 1] != 0)
help = array[i + 1];

се възприема кат

if (array[i] > array[i + 1]) { if (array[i] > help) { help = array[i]; } else if (array[i + 1] != 0) { help = array[i + 1]; } }

което не съм сигурен, че е това което искаш.

Изглежда, когато махаш число от колекцията, го записваш като нула, но това не е правилно, защото може да има значещи отрицатилни числа - вместо нула трябва да ползваш например int.MinValue.

Мисля услловието if (array[i] > array[i + 1]) е ненужно

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


от mitkop (578 точки)


0
using System; using System.Collections.Generic; namespace Maximal_K_sum { class Program { static void Main() { int N = int.Parse(Console.ReadLine()); int K = int.Parse(Console.ReadLine()); int bestsum = 0, max; List<int> numbers = new List<int>(); for (int i = 0; i < N; i++) { numbers.Add(int.Parse(Console.ReadLine())); } for (int j = 0; j < K; j++) { max = int.MinValue; for (int i = 0; i < numbers.Count; i++) { max = max > numbers[i] ? max : numbers[i]; } bestsum += max; numbers.Remove(max); } Console.WriteLine(bestsum); } } }

от mitkop (578 точки)


0

Това е моето решение. Изкарва 100/100 в bgcoder

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace _06.MaximalKSum
  8. {
  9.     class MaximalKSum
  10.     {
  11.         static void Main()
  12.         {
  13.             int n = int.Parse(Console.ReadLine());
  14.             int k = int.Parse(Console.ReadLine());
  15.             int sum = 0;
  16.  
  17.             var arr = new int[n];
  18.             for (int i = 0; i < n; i++)
  19.             {
  20.                 arr[i] = int.Parse(Console.ReadLine());
  21.             }
  22.             var list = arr.ToList();
  23.             list.Sort();
  24.             list.Reverse();
  25.             arr = list.ToArray();
  26.  
  27.             for (int i = 0; i < k; i++)
  28.             {
  29.                 sum += arr[i];
  30.             }
  31.             Console.WriteLine(sum);
  32.         }
  33.     }
  34. }

Има неща които могат да се избегнат като преобразуването масив -> списък и т.н., но целта е да се види още една идея, която работи.

Поздрави :)


от peter.petrov (230 точки)