Loading...
InaAbadjieva avatar InaAbadjieva 8 Точки

Homework Loops - Odd/Even Position

Здравейте,
Tрябва ми малко помощ със следния код: http://pastebin.com/3n8fy1xQ. Като цяло работи програмата, но има проблем с max-овете и min-овете( в част от проверките запазват първоначалната си стойност). Последната част с изкарването на резултатите също надали е най-оптималната, но пък уж работи. Ще се радвам и на други варианти. Мерси предварително...

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

Кода е добре, само една част не си обърнала внимание. Като си написала:

if (num > oddmax) oddmax = num;

else if (num < oddmin) oddmin = num;    

така казваш на програмата, ако не е едното, значи е другото, и то прави само проверка за едното и после спира, а в случая трябва да правиш и за двете неща проверки поотделно, тоест като премахнеш else и за двете проверки, всичко трябва да е наред. Също като препоръка може вместо да пишеш минималните и максимални стойности като 1000000 или -1000000 да свикнеш да пишеш int.MinValue или int.MaxValue (или съответно с double вместо int)

2
19/02/2016 09:57:24
InaAbadjieva avatar InaAbadjieva 8 Точки

10x :) Ясно къде е грешката. Мерси. Другите задачи ги правех с min.Value/max.Value...реших да разнообразя вариантите просто.

0
akatise avatar akatise 4 Точки

Благодаря това пояснение и на мен ми помогна да я реша. Само още не мога да разбера защо трябва да е "if (i % 2 != 0)", а не

"if (i % 2 == 0)" когато смятаме четните и нечетните.

0
gabi.ivanova avatar gabi.ivanova 370 Точки

Когато искаш да провериш дали позицията на числото е четна или нечетна, т.е. числото i проверяваш дали резултатът от делението му с остатък на 2 е 0 или не. Ако числото е четно и го разделиш на 2, делението няма остатък 10 / 2 е 5 (цяло число, остатъкът от делението е 0) значи е четно. Ако има остатък е нечетно 11 / 2 = 5.5, тоест има остатък при делението на 2, който е различен от 0.

if( i % 2 == 0) - четно число

if( i % 2 != 0) - проверява дали е нечетно число, т.е. дали има остатък при делението на 2

когато условието в if-a е проверка дали е четно, ще влиза в else когато е нечетно

1
19/02/2016 14:05:42
gabi.ivanova avatar gabi.ivanova 370 Точки


Когато задаваш в началото минимални и максимални стойности и търсиш дали има по-голямо или по-малко число, използвай double.MinValue и .MaxValue

1
19/02/2016 14:06:09
fbinnzhivko avatar fbinnzhivko 1586 Точки

Pastebin    90/100

Имам някъде малка грешка или грешка във Judge???

0
Thenis avatar Thenis 219 Точки

else-са на 35-ти ред

            else
            {
                OddSum += num;
 
                if (num > EvenMax) { OddMax = num; }
                if (num < EvenMin) { OddMin = num; }
            }

В if-фовете използваш EvenMax и EvenMin когато трябва да използваш OddMin и OddMax.

Ето така трябва да бъде:

                else
                {
                    OddSum += num;

                    if (num > OddMax) { OddMax = num; }
                    if (num < OddMin) { OddMin = num; }
                }

 

0
20/04/2016 16:54:57
StefanChakarov avatar StefanChakarov 1 Точки

Моята програма - http://pastebin.com/w3SiHzK8 - работи и дава 90/100 в judge, но гърми при "n = 0" (в моят случай "num = 0") и немога да си обясня защо. Ако някой има идея - да помага.

0
donahuedtg avatar donahuedtg 2 Точки

Здравейте,

това е преработения код на Стефан, http://pastebin.com/M6NBrmMW сега дава 100 от 100, доста неща промених. Проверките за 0 и 1 трябва да са извън цикъла for. Другото е за единицата по долу съм го описъл.

                else if (num == 1)

                {

                    Console.WriteLine("Oddsum=" + Oddsum); // тука трябва да е curr в твоя случай

                    Console.WriteLine("Oddmin=" + Oddmin); //тука трябва да е curr в твоя случай

                    Console.WriteLine("Oddmax=" + Oddmax); //тука трябва да е curr в твоя случай

                }

 

това е моя код на решението

http://pastebin.com/nkNKL0XP

0
dakata avatar dakata 26 Точки

При мен max-овете и min-овете си ги получих като свойства на масиви от четни и нечетни позиции: http://pastebin.com/bnZF3PBg

0
dakh93 avatar dakh93 53 Точки

Здравейте,имам проблем със задачата и не мога да го измисля.След като я написах и направих първата проверка от документа на изхода EvenMax ми дава стойност 3 , а трябва да е 4.

Ето го кога:http://pastebin.com/K1mZeEgQ

0
Vetomirr avatar Vetomirr 1 Точки

И аз имам същия проблем

0
dakh93 avatar dakh93 53 Точки

Vetomirr,колега

след като си починах един ден без да гледам тази задачка,тази сутрин след малко работа с дебъгера разбрах,че грешката ми е идва от това че имам само 2 променливи "min" и "max" за двата типа числа.И реших да сложа по 2 за всеки тип и това се оказа разковничето към задачата.След това разбира се промених надолу задачата за да наглася при "even" и "odd" миновете и максовете,ако не са променили стойността си да се отпечатва "No".Надявам се да съм бил полезен,а ето го и вече готово решение : http://pastebin.com/fD2c3TYt

0
Vetomirr avatar Vetomirr 1 Точки

Между другото и аз пренаправих задазчата на следващия ден , като изобщо не започнах от начало.

 

using System;

namespace OddEvenPosition
{
    class MainClass
    {
        public static void Main(string[] args)
        {

            Console.Write("n = ");

            var n = int.Parse(Console.ReadLine());

            double maxOdd  = double.MinValue;
            double minOdd  = double.MaxValue;

            double maxEven = double.MinValue;
            double minEven = double.MaxValue;

            double sumOfEven = 0.0;
            double sumOfOdd  = 0.0;

            if (n == 0)
                
            {
                Console.WriteLine("OddSum=0, OddMin=No, OddMax=No, EvenSum=0, EvenMin=No, EvenMax=No");
            }

            if (n == 1)
                
            {
                double num = int.Parse(Console.ReadLine());
                Console.WriteLine("OddSum={0}, OddMin={0}, OddMax={0}, EvenSum=0, EvenMin=No, EvenMax=No", num);
            }

            if (n > 1)
                
            {

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

                    if (i % 2 != 0)
                    {
                        double num = double.Parse(Console.ReadLine());
                        sumOfOdd += num;
                        if (num > maxOdd)
                            maxOdd = num;
                        if (num < minOdd)
                            minOdd = num;
                    }
                    else
                    {
                        double num = double.Parse(Console.ReadLine());
                        sumOfEven += num;
                        if (num > maxEven)
                            maxEven = num;
                        if (num < minEven)
                            minEven = num;
                    }
                }
                Console.WriteLine("OddSum={0}, OddMin={1}, OddMax={2}, EvenSum={3}, EvenMin={4}, EvenMax={5}", sumOfOdd, minOdd, maxOdd, sumOfEven, minEven, maxEven);
            }

        }
    }
}
 

0
Destinote avatar Destinote 5 Точки

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

namespace _11.OddEvenEverything
{
    class ОddEvenEverything
    {
        static void Main(string[] args)
        {
            int NumberOfLoops = int.Parse(Console.ReadLine());

            double OddSum = 0.00;
            double OddMin = double.MaxValue;
            double OddMax = double.MinValue;

            double EvenSum = 0.00;
            double EvenMin = double.MaxValue;
            double EvenMax = double.MinValue;

            for (int Index = 1; Index <= NumberOfLoops; Index++)
            {
                double Number = double.Parse(Console.ReadLine());

                if (Index % 2 != 0)
                {
                    OddSum += Number;

                    if (Number < OddMin)
                    {
                        OddMin = Number;
                    }
                    if (Number > OddMax)
                    {
                        OddMax = Number;
                    }
                }

                if (Index % 2 == 0)
                {
                    EvenSum += Number;

                    if (Number < EvenMin)
                    {
                        EvenMin = Number;
                    }
                    if (Number > EvenMax)
                    {
                        EvenMax = Number;
                    }
                }
            }

            Console.WriteLine($"OddSum={OddSum},");

            if (OddMin == double.MaxValue)
            {
                Console.WriteLine("OddMin= No,");
            }
            if (OddMax == double.MinValue)
            {
                Console.WriteLine("OddMax= No,");
            }
            else
            {
                Console.WriteLine($"OddMin={OddMin},");
                Console.WriteLine($"OddMax={OddMax},");
            }

            Console.WriteLine($"EvenSum={EvenSum},");

            if (EvenMin == double.MaxValue)
            {
                Console.WriteLine("EvenMin= No,");
            }
            if (EvenMax == double.MinValue)
            {
                Console.WriteLine("EvenMax= No,");
            }
            else
            {
                Console.WriteLine($"EvenMin={EvenMin},");
                Console.WriteLine($"EvenMax={EvenMax},");
            }
        }
    }
}

 

Ето моя код, който съм направил да е максимално четлив и приятен за гледане. Надявам се да помогне на някой. Целта в задачата е да се работи само с if конструкции, без else if понеже, когато работиш с else if конструкция, ако if конструкцията се изпълни, то тогава компютъра пренебрегва else if конструкцията и се връща направо в конструкцията за цикъла понеже else се използва само в случай, че предишния if не се е изпълнил. Доста от тези неща могат да се научат самостоятелно, без чужда помощ, ако се следи и обръща внимание на debugger-a, понеже той постъпково показва пътя на програмата и начина на мислене на машината. Препоръчвам всеки, който има проблеми с решаване на задачи, предварително да се позанимава малко с debugger-a, преди да потърси помощ в интернет.

0
13/03/2018 13:07:52
grafcheto avatar grafcheto 2 Точки

Не мога да разбера защо кода ми не работи както трябва: https://pastebin.com/gM9nYfkf

Когато имам отрицателна стойност, не се получава правилният отговор.

Идеята ми беше почти същата като от горния пост, но бях сложил няколко elsa-a повече. Сега го дооформих, но отново дава грешка. Проблемът е, че смята -2.5 за нечетно число, а явно е четно.

0
13/07/2019 14:38:56
MariyanNikov avatar MariyanNikov 16 Точки

@grafcheto,

Проблема идва от Math.Floor метода,който използваш.

Math.Floor(2.5) = 2 ,но

Math.Floor(-2.5) = -3 ,което всъщност си е нечетно число.

 

0
grafcheto avatar grafcheto 2 Точки

За съжаление не е това. Аз сложих floor-a (без да съобразя това, което ти казваш), точно защото смяташе -2.5 за нечетно. Когато го махна, пак се случва същото.

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