Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java
Войти
Регистрация
Восстановить пароль
 
Ashlott
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 50
#1

Нужно объяснить код оллимпиадной задачи

03.06.2013, 13:01. Просмотров 438. Ответов 4
Метки нет (Все метки)

Есть олимпиадная задача:
Группа программистов собралась в понедельник и на все свои деньги купила «Sprite» в бутылках емкостью по 0.25 л., не забыв взять сдачу.
Во вторник они сдали пустую посуду, добавили оставшуюся сдачу и вновь купили столько таких же бутылок «Sprite», сколько могли.
Так они действовали до пятницы. В пятницу, сдав посуду и добавив сдачу с четверга, они смогли купить только одну бутылку напитка. При этом денег у них уже не осталось.
Определить минимальную сумму, которой располагали программисты в понедельник

Вот код к ней:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package javaapplication4;
 
import java.util.Scanner;
 
public class JavaApplication4 
{ 
    public static void main(String[] args) 
    {
        int n, k, b1, b2, b3, b4, kol = 400,min,tmp;
 
        Scanner sc = new Scanner(System.in); 
        System.out.println("Вход:");
        
        System.out.print("n=");
        n = sc.nextInt(); 
        
        System.out.print("k=");
        k = sc.nextInt(); 
        
        min = func(kol,kol,kol,kol,k,n);
        for(b4 = 1; b4 < kol;b4++)
        {
            for(b3 = 1; b3 < kol; b3++)
            {
                for(b2 = 1; b2 < kol; b2++)
                {
                    for(b1 = 1; b1 < kol; b1++)
                    {                                 
                         if(proverka(b1,b2,b3,b4,k,n))
                         {                                                  
                               System.out.println("Вывод: " + func(b1,b2,b3,b4,k,n));                                                   
                               return;
                         }   
                    }    
                }    
            }
        }    
    }
    
    public static int func(int b1,int b2,int b3,int b4,int k,int n)
    {
        return (b1 + b2 + b3 + b4)*(n - k) + n; 
    } 
    
 
 
    public static boolean proverka(int b1,int b2,int b3,int b4,int k,int n)
    {
        boolean res = false;
        if(
                (b1 > b2) && 
                (b2 > b3) && 
                (b3 > b4) && 
                (b4 >0) &&  
                ((n - b4*k) > 0)&& 
                (((b4 + 1)*n - (b3 + b4)*k) > 0)&& 
                (((b3 + b4 + 1)*n - (b2 + b3 + b4)*k) > 0)&&
                (((b2 + b3 + b4 +1)*n - (b1+ b2 + b3 + b4)*k) > 0)&& 
                ((n - b4*k) < n)&& 
                (((b4 + 1)*n - (b3 + b4)*k) < n)&& 
                (((b3 + b4 + 1)*n - (b2 + b3 + b4)*k) < n)&&
                (((b2 + b3 + b4 + 1)*n - (b1+ b2 + b3 + b4)*k) < n)               
          )
        {
            res = true;
        }
        return res;
    }
}
Объясните плз принцип работы. Желательно закомментировать. И если не трудно проверьте программу. Считает вроде правильно, но с чем черт не шутит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2013, 13:01
Ответы с готовыми решениями:

Нужно составить код задачи JAVA
Разработайте класс для подсчета количества медалей разных стран на олимпийский играх...

Объяснить код
Всем привет, может кто ни будь разъяснить мне этот код пожалуйста. А то я либо спёкся уже, или...

Объяснить код
Всем добрый день. Есть код public class Dog { String name; public static void...

Объяснить код в массивах
Всем доброго дня, дана задача: 1. Создать массив на 10 строчек. 2. Ввести с клавиатуры 8 строчек...

Объяснить код метод getBytes()
Задание было Прочесть с консоли имя файла. и Считывать строки с консоли, пока пользователь не...

4
Gibby
152 / 152 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
03.06.2013, 14:24 #2
Что значит "минимальную сумму"?
Стоимость бутыки и выручка от сдачи вводятся с клавиатуры?
0
animator404
97 / 97 / 12
Регистрация: 05.05.2013
Сообщений: 1,206
03.06.2013, 14:30 #3
Цитата Сообщение от Gibby Посмотреть сообщение
Что значит "минимальную сумму"?
Стоимость бутыки и выручка от сдачи вводятся с клавиатуры?
наверное нужно посчитать деньги в бутылках
0
Ashlott
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 50
03.06.2013, 14:34  [ТС] #4
Цитата Сообщение от Gibby Посмотреть сообщение
Что значит "минимальную сумму"?
Стоимость бутыки и выручка от сдачи вводятся с клавиатуры?
Да, цена пустой и цена полной.
0
Gibby
152 / 152 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
03.06.2013, 17:40 #5
Пусть
p — цена бутылки спрайта;
r — выручка от возврата бутылки;
v0 — первоначальная сумма денег
vi — сумма на конец i-го дня

Тогда vi = r * (vi–1 \ p) + vi–1 % p

Требуется, чтобы v4 – p = 0

Пишем функцию v4(v0) и методом хорд находим решение.

Разве не так?

Вот только насчет минимальности я не уверен — функция нелинейная, следовательно решений может быть много.
0
03.06.2013, 17:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 17:40

Восходящее преобразование, объяснить код
Всем привет! Мне не понятен один момент в восходящем преобразовании. Есть два класса: один...

Потоки. Объяснить как работает код
Вот у меня есть код программы, которая создает два процесса. Первый генерирует ряд натуральных...

Не понимаю как сделать. Очень нужно. прошу объяснить
очень желательно примеры


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru