Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Melvil
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
#1

Найти минимальное время, за которое можно поджарить все котлеты - C++

10.07.2015, 16:36. Просмотров 1659. Ответов 29
Метки нет (Все метки)

Добрый день, хочу представить вашему вниманию небольшую задачку:

Кликните здесь для просмотра всего текста
На сковородке одновременно можно положить k котлет. Каждую котлету нужно с каждой стороны обжаривать m минут непрерывно. За какое наименьшее время удастся поджарить с обеих сторон n котлет?

Входные данные

В единственной строке входного файла INPUT.TXT записано три натуральных числа: k, m, n, не превышающих 30000.

Выходные данные

В единственную строку выходного файла OUTPUT.TXT нужно вывести единственное число – минимальное время, за которое можно поджарить все котлеты.


Собственно, задача вроде бы простая, но выдаёт ошибки на разных тестах. Нашёл 2 теста: k = 2, m =1, n = 3 и ответ равен 3 - это правильно или нет? Мне кажется, что должен быть равен 4-м. Также точно ещё числа: k = 99, m = 100, n 100. Ответ теста = 300. Корректны ли тесты? Мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int k, m, n;
    cin >> k >> m >> n;
    if (k == 0 || m == 0 || n == 0)
        cout << 0 << endl;
    int counter = 0;
    while (n > 0)
    {
        n -= k;
        counter += m * 2;
    }
    cout << counter << endl;
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2015, 16:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти минимальное время, за которое можно поджарить все котлеты (C++):

Найти минимальное количество шариков, которое необходимо перекрасить, чтобы все шарики были одного цвета - C++
Написал код для одной задачи. Ответ выдает он вроде правильный. Но на сайте при тестировании моего алгоритма, он проходит тест на 31%...

Найти минимальное количество купюр, которое необходимо использовать, чтобы выдать сумму в n гривен - C++
В банкомате имеются в достаточном количестве купюры номиналом 10, 20, 50, 100, 200 и 500 гривен. Найти минимальное количество купюр,...

Требуется по начальному расположению деталей на первом конвейере определить время, через которое все детали будут изготовлены - C++
Совсем не могу разобраться в программе помогите пожалуйста. Имеются три конвейера. Конвейеры работают независимо друг от друга....

Алгоритм(Найти максимальное совершенное число, которое в то же время меньше введенного N) - C++
Найти максимальное совершенное число, которое в то же время меньше введенного N Справка: Число называется совершенным, если оно...

Графы, найти минимальное время, необходимое для выполнения всех задач - C++
Граф представлен в виде списка смежных. Есть множество задач T1, T2, …, Tn, для выполнения которых необходимо время t1, t2, …, tn...

Найти минимальное время, необходимое для получения N копий одного документа на двух ксероксах - C++
Добрый день, нашёл задачку, нужно решить её методом бинарного поиска ( если будут другие варианты, то тоже спасибо ). Вот сама задачка: ...

29
ValeryS
Модератор
6746 / 5155 / 493
Регистрация: 14.02.2011
Сообщений: 17,324
10.07.2015, 18:45 #16
Цитата Сообщение от Melvil Посмотреть сообщение
проверьте вашу программу на числах k = 2, n = 2, n = 1
Я уже посмотрел
Цитата Сообщение от D_Gon Посмотреть сообщение
C++
1
2
3
4
int counter = 2*n/k;//колличество жарок
    if ( !n%k )
        if ( counter )
            ++counter;
int counter = 2*n/k;//колличество жарок
2*1/2=1
if ( !n%k )
вот здесь ошибка,если есть остаток тогда добавим одну жарку т.е if ( n%k ) или if ( n%k!=0 )
1%2 =1
if ( counter ) непонятно зачем
++counter; 1+1=2
итого две жарки по две минуты, итого 4

Добавлено через 4 минуты
но вот что будет если вмещает три котлеты а жарить одну?
int counter = 2*n/k;//количество жарок
2*1/3=0
if ( !n%k )
вот здесь ошибка,если есть остаток тогда добавим одну жарку т.е if ( n%k ) или if ( n%k!=0 )
1%3 =1
if ( counter ) 0 т.е ложь не входим

вообще не жарим, сырую съедим
правильно нехрен ради одной котлеты сковородку портить

Добавлено через 1 минуту
Цитата Сообщение от Melvil Посмотреть сообщение
if (!n%k)
и что проканало?
% не определен для double
1
Melvil
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
10.07.2015, 18:54  [ТС] #17
Цитата Сообщение от ValeryS Посмотреть сообщение
и что проканало?
% не определен для double
Я так понял это обозначает:

C++
1
if (n%k == 0 )
А вообще фишка в том, что код ниже по факту - мусор и он не будет использоваться. Если посмотреть на моё первоначальное решение, то оно такое же, только без данного кода.

Цитата Сообщение от D_Gon Посмотреть сообщение
if ( !n%k )
* * * * if ( counter )
* * * * * * ++counter;
0
D_Gon
24 / 13 / 5
Регистрация: 09.07.2015
Сообщений: 47
10.07.2015, 18:59 #18
Прошу прощения за предыдущий пост, вроде так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
int main(){
 
    int capacity, time, raw;
 
    cin >> capacity >> time >> raw;
 
    int counter = 2*( raw/capacity );
    
    if( counter != 0 && ( raw%capacity )*2 <= capacity )
        ++counter;
    else
        counter +=2;
 
    cout << counter*time << endl;
 
    return 0;
}
0
Melvil
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
10.07.2015, 19:00  [ТС] #19
Кто меньше?:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
 
main()
{
    int k,c;
    double m, n;
    std::cin >> k >> m >> n;
    if (n <= k)
    {
        std::cout << m * 2;
        exit(0);
    }
    c = ceil((2 * n) / k);
    std::cout << c*m;
}
D_Gon,
Ошибка, только уже на первом тесте.
1
ValeryS
Модератор
6746 / 5155 / 493
Регистрация: 14.02.2011
Сообщений: 17,324
10.07.2015, 19:01 #20
Цитата Сообщение от Melvil Посмотреть сообщение
Я так понял это обозначает:
% это остаток от деления, определен для целочисленных
например
3/2 равно 1 и остаток 1
3%2 =1
если числа кратные то остаток 0
4/2=2
4%2=0
0
D_Gon
24 / 13 / 5
Регистрация: 09.07.2015
Сообщений: 47
10.07.2015, 19:02 #21
C++
1
2
3
наверно на этом
if (k == 0 || m == 0 || n == 0)
        cout << 0 << endl;
0
ValeryS
Модератор
6746 / 5155 / 493
Регистрация: 14.02.2011
Сообщений: 17,324
10.07.2015, 19:03 #22
Цитата Сообщение от Melvil Посмотреть сообщение
Кто меньше?:
Цитата Сообщение от Melvil Посмотреть сообщение
c = ceil((2 * n) / k);
* * std::cout << c*m;
C++
1
std::cout << ceil((2 * n) / k)*m;
0
Melvil
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
10.07.2015, 19:07  [ТС] #23
Цитата Сообщение от ValeryS Посмотреть сообщение
% это остаток от деления, определен для целочисленных
например
3/2 равно 1 и остаток 1
3%2 =1
если числа кратные то остаток 0
4/2=2
4%2=0
Я имел ввиду
Цитата Сообщение от ValeryS Посмотреть сообщение
if ( !n%k )
==
Цитата Сообщение от Melvil Посмотреть сообщение
if (n%k == 0 )
Или нет?
0
ValeryS
Модератор
6746 / 5155 / 493
Регистрация: 14.02.2011
Сообщений: 17,324
10.07.2015, 19:13 #24
Цитата Сообщение от Melvil Посмотреть сообщение
Или нет?
Да
в Си любое число кроме 0 это ИСИНА 0-ЛОЖЬ
смотрим n%k допустим 3%2=1, 1 это ИСТИНА, !1 это ЛОЖЬ
берем
4%2 =0 ЛОЖЬ, !0 ИСТИНА
теперь
4%2==0 ИСТИНА
т.е
n%k == 0 и !n%k это две записи одного и того же
0
D_Gon
24 / 13 / 5
Регистрация: 09.07.2015
Сообщений: 47
10.07.2015, 19:16 #25
Русские не сдаются:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
int main(){
 
    int capacity, time, raw;
 
    cin >> capacity >> time >> raw;
 
    int counter;
    
    if( raw%capacity == 0 )
        counter = 2*( raw/capacity );
    else if( raw/capacity != 0 && ( raw%capacity )*2 <= capacity )
        counter = 2*( raw/capacity ) + 1;
    else
        counter = 2*( raw/capacity ) + 2;
 
    cout << counter*time << endl;
 
    return 0;
}
0
ValeryS
Модератор
6746 / 5155 / 493
Регистрация: 14.02.2011
Сообщений: 17,324
10.07.2015, 19:18 #26
Цитата Сообщение от D_Gon Посмотреть сообщение
time
переименуй
это слово зарезервировано в <time.h>
0
D_Gon
10.07.2015, 19:21
  #27

Не по теме:

да в этой задаче эта переменная лишняя пусть выделяется

0
Melvil
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
10.07.2015, 19:43  [ТС] #28
Цитата Сообщение от D_Gon Посмотреть сообщение
Русские не сдаются:
Поздравляю, Accepted
0
D_Gon
10.07.2015, 19:47
  #29

Не по теме:

Теперь можна и поесть.

0
ValeryS
10.07.2015, 19:55     Найти минимальное время, за которое можно поджарить все котлеты
  #30

Не по теме:

Цитата Сообщение от D_Gon Посмотреть сообщение
Теперь можна и поесть.
смотри опять опоздаешь
Цитата Сообщение от D_Gon Посмотреть сообщение
похоже я неудачнег ( решил немного перекусить )

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2015, 19:55
Привет! Вот еще темы с ответами:

Минимальное число, которое делится нацело - C++
Необходимо решить задачу с помощью цикла! Условие: Напечатать минимальное число, большее 200, которое нацело делиться на 17 То что...

Найти минимальное количество первых букв, по которым можно различить слова из заданного набора - C++
Задан массив слов. Написать программу, указывающую минимальное количество первых букв, по которым можно разли¬чить слова из заданного...

Как найти минимальное время которое удовлетворяет условие? - Алгоритмы
Входные данные В первой строке заданы два целых числа N и K (1 ≤ N ≤ 100 – количество миссий, 0 ≤ K ≤ 10000 – количество очков,...

Меню, которое все время на экране и которое не исчезает при скролле странички - C# ASP.NET
как делается меню, которое все время на экране и которое не исчезает при скролле странички?


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

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

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