Професионална програма
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