Loading...
Vincent avatar Vincent 11 Точки

Помощ за две задачи от предишни изпити

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

1.Първата е от последния изпит. Не мога да загръгля BigIntiger 

Това е кода

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Scanner;

public class dasdasa {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int num1 = Integer.parseInt(scanner.nextLine());
        int num2 = Integer.parseInt(scanner.nextLine());

        String [] name = new String[num1];
        int [] visits = new int[num1];
        double [] price = new double[num1];
        BigDecimal [] multiply = new BigDecimal[num1];

        BigDecimal total = new BigDecimal("0.0");

        for (int i = 0; i <num1 ; i++) {
            name[i]=scanner.next();
            visits[i]=Integer.parseInt(scanner.next());
            price[i]=Double.parseDouble(scanner.next());
            multiply[i]=BigDecimal.valueOf(visits[i]*price[i]);
        }

        for (int i = 0; i < num1; i++) {
            total = total.add(multiply[i]);
        }
        for(String start: name){
            System.out.println(start);
        }
        double securityToken = Math.pow(num2,num1);
        System.out.printf("Total Loss: %.20f%n",total);
        System.out.printf("Security Token: %.0f",securityToken);



    }

}

2. Втората е тази https://judge.softuni.bg/Contests/Practice/DownloadResource/1844

Тук на грешките джъдж не ми дава инпът и ми е трудно да разбера къде греша. Това е кода:

import java.math.BigDecimal;
import java.util.Scanner;

public class Testt {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String[] time = scanner.nextLine().split("[:]");

        int steps = Integer.parseInt(scanner.nextLine());
        int second = Integer.parseInt(scanner.nextLine());
        int total =steps*second;

        int hours = (total / 3600)+Integer.parseInt(time[0]);
        int minutes = ((total % 3600) / 60)+Integer.parseInt(time[1]);
        int seconds = (total % 60)+Integer.parseInt(time[2]);

        if(seconds==60){
            minutes++;
            seconds=00;
        }
        if(minutes==60){
            hours++;
            minutes=00;
        }
        if(seconds>60){
            seconds=seconds%60;
            minutes++;
        }
        if(minutes>60){
            hours+=minutes%60;
            hours++;
        }
        if(hours>=24){
            hours=hours-24;
        }

        System.out.printf("Time Arrival: %02d:%02d:%02d", hours, minutes, seconds);



    }
}
Тагове:
0
Programming Fundamentals 12/11/2017 18:21:32
Vincent avatar Vincent 11 Точки

Ако може да ударите още едно рамо за проблем свързан с Deciamal Format в Java. 

На тази задача https://judge.softuni.bg/Contests/Practice/DownloadResource/2364

С две думи иска се decimal закръгляне, а аз пиша на Java.

Когато му дам:

DecimalFormat df = new DecimalFormat("#.###");
System.out.println(df.format(total));

Джъдж казва:

Expected           Your

1122430.000   1122430
1070350.512   1070350.512

Когато му дам 

DecimalFormat df = new DecimalFormat("#.000");
System.out.println(df.format(total));

Джъдж казва:

Expected   Your

1100000    1100000.000
1012500    1012500.000

Как да се оправя?

0
boyan_georgiev avatar boyan_georgiev 62 Точки

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

0
Vincent avatar Vincent 11 Точки

Ами не ми изглежда динамично. В C# се слага един decimal и джъдж дава 100/100.

В Java не знам защо не се получава. Ето това ми е пълния код

import java.text.DecimalFormat;
import java.util.Scanner;

public class Testt {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

       int count = Integer.parseInt(scanner.nextLine());
       double total = 0;
        for (int i = 0; i <count ; i++) {
            long length = Long.parseLong(scanner.nextLine());
            double width = Double.parseDouble(scanner.nextLine());
            long lengthWing = Long.parseLong(scanner.nextLine());
            total=(length*length)*(width+(2*lengthWing));

            DecimalFormat df = new DecimalFormat("#.###");
            System.out.println(df.format(total));

        }


    }

}
0
17/11/2017 00:29:43
boyan_georgiev avatar boyan_georgiev 62 Точки

В constraints пише - The total years should have the same accuracy as the total width. Т.е. всеки път ще имаш различна точност след десетичната запетая, в зависимост от входа, следователно патърна е динамичен. Ето решение - https://pastebin.com/H6KTutWc. Само че един тест пак ще ти гърми и като прочетеш отново constraints - The total width of the body of the phoenix will have up to 20 digits after the decimal point. Double няма достатъчно точност и ти трябва BigDecimal, а с него няма да има нужда да се занимаваш с патърните - https://pastebin.com/sMu5AD4G.

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