Loading...
Lescet avatar Lescet 25 Точки

Simple Loops - Odd / Even Position!

Здравейте, опитвам да реша тази задача без подсказките, но я докарвам до 80/100 . Малко помощ може ли ?

Условието - http://prikachi.com/images.php?images/570/8695570g.png

Моето решение - http://pastebin.com/a9JfCjZD

Тагове:
0
Programming Basics
Pete1 avatar Pete1 56 Точки
Best Answer

Fix-нах кода ти, беше объркан на места, няма да разпъвам локуми, просто сравни двата кода http://pastebin.com/JzQjeWaZ и сам си направи изводите. Успех !

1
Lescet avatar Lescet 25 Точки

Поне съм хванал логиката, но здраво съм ги разместил ...

0
Pete1 avatar Pete1 56 Точки

С изключение на цикъла, логиката за задачата ти беше правилна (изключвам това, че си разменил местата на някои променливи, което най - вероятно е станало от невнимание). Като си отвориш тестовете на source code-a ти в judge-a, ти сравнява двата изхода, на твоя source code и на този от judge-a, който се използва за проверката, ако няма разминаване в output-a и някой тест ти гърми, и не получаваш пълния брой точки за конкретната задача (примерно 80/100), то най - вероятно си сгрешил типа на дадена променлива и judge-a вкарва стойности с които прехвърля range-a и или в твоя случай ( при работа с цикли) имаш случай по - малко, защото си изпуснал равно в цикъла или в някой if, сигурен съм, че абсолютно всеки е правил тези грешки, може и да греша де, но с повече практика ще се изчистят.

1
17/03/2016 15:52:24
Plamen27 avatar Plamen27 599 Точки

Към
Pete1:

Няма грешка в променливите, тяхната промяна не носи до някакво решение или подобрение.

1. Грешката в кода е в условието на for цикъла

2. Грешките в долната част на кода където са разменени oddMax и evenMax примерно и така нататък са направени нарочно.

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

Тестовете ми показаха точно това.

0
10/04/2017 10:52:12
Shirdor avatar Shirdor 131 Точки

на одмин и одмакс дефолтната стойност трябва да ти е "no" a не числата които си сложил. Ако натиснеш детайли

е видиш проблемите

 

0
17/03/2016 14:22:41
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

Здравей,

Като за начална максимална стойност може да използваш Double.MinValue, респективно за минималната - Double.MaxValue.

Посочено ти е, че позициите ги броим от 1, следователно фор цикъла ти трябва да започва от 1 и да е <= n. типа за позицията спокойно може да ти е int, няма смисъл от double.

В изходите / отпечатването / си разменил Even с Odd, това е третото което забелязвам.

Имай в предвид, че не съм ти разглеждал кода обстойно, а само бегъл поглед. Това ти го пиша за насоки.

Успех

1
17/03/2016 14:30:20
Plamen27 avatar Plamen27 599 Точки

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

Основната грешка на колегата е във for цикъла и неговите условия.

Втората грешка във крайните if else проверки са направени нарочно - това е стъкмистика, която наистина дава 80 точки,

защото при сгрешено условия в цикъла стойностите от проверката на задачата се оказват огледално обърнати - odd решенията стават на мястото на even. Това е частен случай и е нагляден пример за стъкмистика :). В началото и на мен ми мина през главата, но нямаше никакво логическо обяснение - това да е правилния подход.

0
GalinHristov avatar GalinHristov 1 Точки

Здравейте :)

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

Уж всичко си е наред, но накрая 20/100!  Не разбирам защо!? При отпечатването на числата... вместо да е 3, при мене се получава 3.0 и точно заради тази ".0" се заяжда джъдж! Как може да се ремонтира това? И всъщност дали това е проблема?

Ето го и моят код: 


package oddevenposition;

import java.util.Scanner;

public class OddEvenPosition {

   
    public static void main(String[] args) {
       Scanner scn = new Scanner(System.in);
        double n = Integer.parseInt(scn.nextLine());
        double oddSum = 0;
        double evenSum = 0;
        double MaxO = -1000000000;
        double MinO = 1000000000;
        double MaxE = -1000000000;
        double MinE = 1000000000;
        
        
        for (int i=1; i<=n;i++){
        double x = Double.parseDouble(scn.nextLine());
        
        if(i%2==0){
           if(x>MaxE){
        MaxE=x;
        }  if (x<MinE) {  
            MinE=x;
        } 
        evenSum = evenSum+x;
        
        } else {
            if(x>MaxO){
        MaxO=x;
        }   if (x<MinO) {  
            MinO=x;
        } 
        oddSum=oddSum+x;
        }
     }      
        System.out.println("OddSum = " + oddSum);
        if(MinO==1000000000){
        System.out.println("OddMin = No");
        } else {
        System.out.println("OddMin = " + MinO);
        }
        if(MaxO==-1000000000){
        System.out.println("OddMax = No");
        } else {
        System.out.println("OddMax = " + MaxO);
        }
               
        System.out.println("EvenSum = " + evenSum);
       if(MinE==1000000000){
       System.out.println("EvenMin = No");
       } else {
       System.out.println("EvenMin = " + MinE);
       }
        if(MaxE==-1000000000){
        System.out.println("EvenMax = No");
        } else {
        System.out.println("EvenMax = " + MaxE);
        }
    }    
}

0
desislava777 avatar desislava777 165 Точки

Не трябва ли да зададеш числата да са от тип int, за да излиза 3 не 3.0. Опитай по този начин.

0
dakh93 avatar dakh93 53 Точки

Колега и аз мисля като колежката,че е добре да си ги направиш от тип "int".Също бих те посъветвал на тези  

double MaxO = -1000000000;
double MinO = 1000000000;
double MaxE = -1000000000;
double MinE = 1000000000;

след като си им дадеш да са от тип "int" за по-сигурно спрямо минимална и максимална стойност им задай минимума и максимума за типа.

  int MaxO =int.MinValue;
  int MinO = int.MaxValue;
  int MaxE = int.MinValue;
  int MinE = int.MaxValue;

Надявам се да съм бил полезен :)
 

0
GalinHristov avatar GalinHristov 1 Точки

Здравей и благодаря за съвета, но не става и така :(

Трябва да въвеждаме дробни числа, а не цели, т.е double :/

И не става и се чудя как да се оправи това , не може да са Int.

0
desislava777 avatar desislava777 165 Точки

За съжаление в момента не разполагам с Visual Studio, за да пробвам твоя код. Ако искаш разгледай моето решение, което ми даде 100 точки в judge.

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

namespace ConsoleApplication88
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            double EvenSum = 0;
            double OddSum = 0;
            double EvenMax = double.MinValue;
            double EvenMin = double.MaxValue;
            double OddMax = double.MinValue;
            double OddMin = double.MaxValue;
            if (n == 0)
            {
                Console.WriteLine("OddSum = " + 0);
                Console.WriteLine("OddMin = No");
                Console.WriteLine("OddMax = No");
                Console.WriteLine("EvenSum = " + 0);
                Console.WriteLine("EvenMin = No");
                Console.WriteLine("EvenMax = No");

            }
            else if (n > 0)
            {
                for (int i = 1; i <= n; i++)
                {
                    var num = double.Parse(Console.ReadLine());
                    if (n == 1)
                    {
                        Console.WriteLine("OddSum = {0}", num);
                        Console.WriteLine("OddMin = {0}", num);
                        Console.WriteLine("OddMax = {0}", num);
                        Console.WriteLine("EvenSum = " + 0);
                        Console.WriteLine("EvenMin = No");
                        Console.WriteLine("EvenMax = No");
                    }
                    if (i % 2 != 0)
                    {
                        OddSum += num;
                        if (num > OddMax)
                        {
                            OddMax = num;
                        }
                        if (num < OddMin)
                        {
                            OddMin = num;
                        }
                    }
                    else
                    {
                        EvenSum += num;
                        if (num > EvenMax)
                        {
                            EvenMax = num;
                        }
                        if (num < EvenMin)
                        {
                            EvenMin = num;
                        }
                    }
                }
                if (n > 1)
                {
                    Console.WriteLine("OddSum={0}", OddSum);
                    Console.WriteLine("OddMin={0}", OddMin);
                    Console.WriteLine("OddMax={0}", OddMax);
                    Console.WriteLine("EvenSum={0}", EvenSum);
                    Console.WriteLine("EvenMin={0}", EvenMin);
                    Console.WriteLine("EvenMax={0}", EvenMax);
                }
            }
        }
    }
}

0
mishelle avatar mishelle 0 Точки

Ще оставя и аз едно решение, забелязвам колко сте активни във форума, а на мен това ми е първи коментар ... 
 

http://pastebin.com/36RPNq1R

0
RIFFRAFF avatar RIFFRAFF 7 Точки

Здравейте ,

Борих се доста с тази задачка ,но уви стигнах до момент ,където не мога да хвана грешката. Дава ми грешка на два теста . 

Тук е кодът и ще се радвам ,ако някой намери време да го погледне и да ми даде няква насока.

https://pastebin.com/hbtQ8ZTv

Благодарско !

0
bujovichh avatar bujovichh 1 Точки

Имам въпрос...
Защо  oddmin = 2 ,не трябва ли oddmin = 1 (нечетно число 1 ...2 е четно ?!? )
EvenMin = 1 , не трябва ли да е Evenmin =2 ?!

.. защо за четно число се получава -2.5 на (sum ,min i max) 
Не тярбва ли да е Sum = 0 , min = no , max = no ?!?

Има грешка в примерите или аз греша ?

6

2

3

5

4

2

1

OddSum=9, OddMin=2, OddMax=5, EvenSum=8, EvenMin=1, EvenMax=4

вход

изход

2

1.5

-2.5

OddSum=1.5, OddMin=1.5, OddMax=1.5, EvenSum=-2.5, EvenMin=-2.5, EvenMax=-2.5

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