Loading...
rostislav_kolev avatar rostislav_kolev 3 Точки

16. * Елемент, равен на сумата на останалите

Да се напише програма, която въвежда n цели числа и проверява дали сред тях съществува число, което е равно на сумата на всички останали. Ако има такъв елемент, печата "Yes" + неговата стойност; иначе печата "No" + разликата между най-големия елемент и сумата на останалите (по абсолютна стойност).  

          {
            var n = int.Parse(Console.ReadLine());
            var max = int.Parse(Console.ReadLine());
            var sum = 0;
            var num = 0;
            for (int i = 1; i < n; i++)
            {
                num = int.Parse(Console.ReadLine());
                if (num > max)
                { max = num;}
                sum += num - max*2;
            }
            if (sum == max)
                Console.WriteLine("Yes sum = " + sum);
            else
                Console.WriteLine("No Diff = " + Math.Abs(sum-max))
        }

Колеги, помъчих се здраво над тази привидно лесна задача, но не ми се получава. Ще се радвам, ако някой ми удари едно рамо ;)

Тагове:
0
Programming Basics
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки
Best Answer

eто кода с корекции тук : http://pastebin.com/Czjhk0ft . А сега пояснения за грешките в твоя код. Според това което си написал, като си изкарал числото max веднага да се пише след n,  така не включваш това число към сумата. Оправих и цикъла да е с една стъпка повече, и освен това сумата ти вътре във for цикъла трябва да се натрупва до края на цикъла, и чак след края на цикъла да се правят сравнение и обработки с него. Надявам се разясненията да са ясни.

1
MiroStoykov avatar MiroStoykov 0 Точки

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication3
    {
    class Program
        {
        static void Main(string[] args)
            {
            var input = Convert.ToInt32(Console.ReadLine());
            var bigest = 0;
            var sum = 0;
            for (int i = 1; i <=input; i++)
                {
                var number = Convert.ToInt32(Console.ReadLine());
                sum = sum+number;
                if (bigest<number)
                    {
                    bigest = number;
                    }
                }
            if (sum==bigest*2)
                {
                Console.WriteLine("Yes");
                Console.WriteLine("Sum = "+bigest);
                }
            else
                {
                Console.WriteLine("No");
                Console.WriteLine("Diff = "+Math.Abs((sum-bigest)-bigest));
                }
            }
        }
    }
0
IskrenPenev avatar IskrenPenev 177 Точки

Не мога да разбера, защо четеш и втора променлива от конзолата.

Аз го разбирам така - четеш 1 число(n), след това правиш масив от числа с дължина N.След това сравняваш всеки член на масива с предходния докато намериш най- големия. Накрая събираш сумата на всички числа в масива, делиш на 2 и ако е по малко от макс-а - принтираш макса.

това би трябвало да свърши работа

http://pastebin.com/Z9cmQMYc

1
Shinigami avatar Shinigami 24 Точки

Може ли да ми копираш цялото условие защото по програмата и условието,които си дал не суответстват 

0
rostislav_kolev avatar rostislav_kolev 3 Точки

вход

изход

7

3

4

1

1

2

12

1

Yes

Sum = 12

3

1

1

10

No

Diff = 8

|10 - (1 + 1)| = 8

0
KOSTADINMARKOV avatar KOSTADINMARKOV 22 Точки

using System;

class Program
{
    static void Main(string[] args)
    {
        int n = int.Parse(Console.ReadLine());
        int sum = 0;
        int max = 0;
        for (int i = 0; i < n; i++)
        {
            int m = int.Parse(Console.ReadLine());
            sum += m;
            if (i == 0)
                max = m;
            if (m > max)
                max = m;
        }
        sum -= max;
        if (sum == max)
        {
            Console.WriteLine("Yes");
            Console.WriteLine("sum = {0}",max);
        }
        else
        {
            Console.WriteLine("No");
            Console.WriteLine("diff = {0}", Math.Abs(sum - max));
        }
    }
}

 

0
Destinote avatar Destinote 5 Точки

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _10.HalfSumElement
{
    class HalfSumElement
    {
        static void Main(string[] args)
        {
            int NumberOfNumbers = int.Parse(Console.ReadLine());
            int MaxNumber = -1000000000;
            int Sum = 0;

            for (int Index = 0; Index < NumberOfNumbers; Index++)
            {
                int Number = int.Parse(Console.ReadLine());
                Sum = Number + Sum;

                if (Number > MaxNumber)
                {
                    MaxNumber = Number;
                }

            }

            int SumWithoutMax = Sum - MaxNumber;

            if (SumWithoutMax == MaxNumber)
            {
                Console.WriteLine($" Yes Sum = {MaxNumber}");
            }
            else
            {
                Console.WriteLine($"No Diff = {Math.Abs(SumWithoutMax - MaxNumber)}");
            }
        }
    }
}

 

Ето го и моето решение, с малки разлики, от това на колегата Петър. Аз просто не съм прочел предварително числото, което ще прочитаме от конзолата за всяко изпълнение на цикъла, понеже не виждам смисъл да се декларира предварително, тей като няма да имаме нужда от него, извън самия цикъл. Има и други разлики, като начина по който се декларира Максимумата, а от там и номера на повторения на цикъла, но то общо взето кода си работи перфектно. Надявам се че ще е от ползва за някой :) 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.