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

Coding101/SimpleLoops/HalfSumElement

Предполагам, че задачата Half Sum Element в judge-системата отговаря на задача "15.Елемент равен на сумата от останалите" от "Повторения(цикли)", въпреки че в условието не става дума за нищо "half". Качих едно решение, което получи 60 точки - pastebin.com/9mXuWMg6

Някаква идея какво пропускам за 100? 

Тагове:
0
Programming Basics
evgenikolov avatar evgenikolov 304 Точки

Мисля че имаш проблем в ред 14.
var largest = -999999;
Ако ти подадат число което е над тази граница, да кажем -10326203, никога няма да го презапишеш като largest понеже проверката няма да минава.

Най-добре направи largest да е long и използвай вградената константа на long за минимална стойност.
long largest = long.MinValue

Всъщност сега разгледах задачата и преработих 'малко' кода ти.

Ето това нахвърлях набързо като гледах да е максимално опростено въпреки че съдържа масив. Описах всички стъпки, които съм променил какво правят. Така написана задачата дава 100/100 в Judge.

 

0
13/02/2016 01:17:32
yasen6275 avatar yasen6275 18 Точки
using System;
namespace maxsum{
	class MainClass{
		public static void Main (string[] args){
			int ele = int.Parse(Console.ReadLine ());
			int maxele = 0;
			int sum = 0;
			for (int i = 0; i < ele; i++) {
				var nums  = int.Parse(Console.ReadLine ());
				sum += nums;
				if (i==0) {maxele = nums;}
				else if (maxele<nums) {maxele = nums;}}
			var diff = sum - maxele;
			if ( diff == maxele ) {Console.WriteLine ("Yes, Sum = {0}",maxele);} 
			else {Console.WriteLine ("No, diff={0}", Math.Abs(sum - 2*maxele));}}}}

Масива ми се струва че е излишен.

0
fredadum avatar fredadum 3 Точки

Да, и на мен ми харесва най-много твоето решение, защото е без масиви (най-вече защото още не съм съвсем наясно какво е масив :) ). Но имам следното предложенние за опростяване - редът                     " if (i==0) {maxele = nums;} " от цикъла е излишен.  Дори и без тази команда, както и без думата "else" от следващия ред,  кодът работи за 100 точки.

0
CvetanCankovVelikov avatar CvetanCankovVelikov 30 Точки

Ето го и моето решение,надявам се да ти помогне http://pastebin.com/npZp7mZA

0
13/02/2016 11:55:05
luki_strike avatar luki_strike 9 Точки

Грешката ти е че когато имаш 2 или повече числа по големи от largest то ги записва в него и не преминава към сумирането на предходното. Трябва всяко въведено число да го прибаваш към предходната сума. Накрая вадиш най - голямото и проверяваш.

for (int i = 1; i <= n; i++)

{
       var num = int.Parse(Console.ReadLine());
       if(num > largest)
       {
            largest = num;
        }
        sum = sum + num;
}
sum = sum - largest;
if (largest == sum || n == 0)
{

............ и така нататък за разликата и за равенството си го написал.

0
Ivaylo76 avatar Ivaylo76 4 Точки

Ето това е моето решение, което работи на 100 и мисля, че най-малко се отдалечава от нивото на материала, който сме взели - http://pastebin.com/desqfTxY

1
notarobot avatar notarobot 7 Точки

благодаря ти,това е идеално !!

0
cvetkov.a avatar cvetkov.a 1 Точки

Това е моето решение с взетия досега материал. Мисля че е максимално разбираемо.

0
17/02/2016 00:08:03
g_todorov avatar g_todorov 106 Точки

Здравей fredadum,

след известно главоблъскане успях да я измъдря тая задача. Тук особеното е да сравняваш в началото 

с възможно най-минималната стойност позволена за формат int. - това е int.MinValue. Стойността е много ниска и ако искаш може да си я видиш с един Console.WriteLine(); лично аз вече я забравих :) Кръстил съм променливата, която съдържа от начало в себе си int.MinValue с дълго и "говорящо " име (comparisonMaxBasis), за да се разбира лесно и от четящите след мен кода.

Успех!

Ето и кода:

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

namespace HalfSumElement2
{
    class Program
    {
        static void Main(string[] args)
        {
            var nCount = int.Parse(Console.ReadLine());
            var sum = 0;
            var num = 0;
            var comparisonMaxBasis = int.MinValue;
            for (int i = 1; i <= nCount; i++)
            {
                num = int.Parse(Console.ReadLine());
                if (num > comparisonMaxBasis)
                {
                    comparisonMaxBasis = num;
                }
                sum = sum + num;
            }
            sum = sum - comparisonMaxBasis;
            if (sum == comparisonMaxBasis)
                Console.WriteLine("Yes sum = " + sum);
            else
                Console.WriteLine("No Diff = " + Math.Abs(sum - comparisonMaxBasis));
        }
    }
}

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