Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
vizapromo
18 / 11 / 6
Регистрация: 04.12.2012
Сообщений: 51
#1

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

04.12.2012, 23:12. Просмотров 456. Ответов 5
Метки нет (Все метки)

Помогите пожалуйста с задачкой. Дана плошадь комнаты WxH и размеры кафеля A x B. Нужно найти минимальное количество плиток которыми нужно покрыть пол. Класть плитки нужно так, чтобы одна сторона плитки граничала максимум с одной плиткой и была параллельна одной из сторон комнаты. Поворачивать плитку нельзя, но резать вдоль одной из сторон можно, также разрезанный кусок можно разрезать на мелкие кусочки. Помогите пожалуйста.
Вот мой код, но не знаю где ошибка:
http://www.cyberforum.ru/cpp-beginners/thread1531133.html

C++
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
#include <iostream>
 
using namespace std;
 
int main ()
{
    int w, h, w1, h1, a, b, k = 0, p, p1;
    cin >> w >> h >> a >> b;
    w1 = w % a; h1 = h % b;
    k = (w / a) * (h / b);
    if(w1 == 0 && h1 == 0) {
        cout << k << endl;
        return 0;
    }
    else if(w1 == 0 && h1 != 0) {
        p = w % ((a * b) / h1);
        if(p != 0)
            k++;
        k += w / ((a * b) / h1);
        cout << k << endl;
        return 0;
    }
    else if(w1 != 0 && h1 == 0) {
        p = h % ((a * b) / w1);
        if(p != 0)
            k++;
        k += h / ((a * b) / w1);
        cout << k << endl;
        return 0;
    }
    else if(w1 != 0 && h1 != 0) {
        p = w % ((a * (b / h1))); k += w / ((a * (b / h1)));
        if(p != 0)
            k++;
        k += h / ((b * (a / w1)));
        if(h < ((b * (a / w1)))) k++;
        cout << k << endl;
        return 0;
    }
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 23:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти минимальное количество плиток, которыми нужно покрыть пол (C++):

Определить минимальное количество отрезков единичной длины необходимых для того чтоб покрыть все точки
И снова здравствуйте.Условие:даны N точек с двойной точностью(точки заданные...

Определить минимальное или максимальное количество актеров, с которыми режиссер должен переговорить
В театре работает n актеров. Известно, что среди них a – высоких, b –...

Найти в серии показаний минимальное произведение двух показаний, между которыми прошло не менее 6 минут
Добрый день, задали по информатике на днях решить следующую задачу: На...

Найти количество расположенных последовательно положительных элементов, которыми заканчивается массив
Выясните количество расположенных последовательно положительных элементов,...

Определить количество плиток попадающих внутрь круга
Лич Сандро проводит свои научные исследования в магии огня. Сандро стоит в...

5
vizapromo
18 / 11 / 6
Регистрация: 04.12.2012
Сообщений: 51
15.12.2012, 15:40  [ТС] #2
up up
0
valeriikozlov
Эксперт С++
4683 / 2509 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
15.12.2012, 18:29 #3
Контрпример:
7 5 3 2
правильный ответ: 6
У Вас выдает: 7.

Кстати если поменять местами входные данные, вот такой тест: 5 7 2 3, то Ваш код выдает правильный ответ.
1
vizapromo
18 / 11 / 6
Регистрация: 04.12.2012
Сообщений: 51
16.12.2012, 14:43  [ТС] #4
Спасибо, можете исправить ошибку в моем коде??, а то я уже почти 2 недели несколько раз набирал новый код, никак не получается((. Исправляю в одном месте, получается ошибка в другом...(
0
valeriikozlov
Эксперт С++
4683 / 2509 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
16.12.2012, 18:37 #5
Попробуйте вот так:
C++
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
#include <iostream>
 
using namespace std;
 
int main ()
{
    int w, h, w1, h1, a, b, k = 0;
    cin >> w >> h >> a >> b;
    w1 = w % a; h1 = h % b;
    k = (w / a) * (h / b);
    if(w1 == 0 && h1 == 0) {
        cout << k << endl;
        return 0;
    }
    else if(w1 == 0 && h1 != 0) {
        while(w>0)
        {
            k++;
            w-=(b/h1)*a;
        }
        cout << k << endl;
        return 0;
    }
    else if(w1 != 0 && h1 == 0) {
        while(h>0)
        {
            k++;
            h-=(a/w1)*b;
        }        
        cout << k << endl;
        return 0;
    }
    else if(w1 != 0 && h1 != 0) {
        int W=w, H=h, t1=0, t2=0;
        while(W>0)
        {
            t1++;
            W-=(b/h1)*a;
        }       
        H-=h1;
        while(H>0)
        {
            t1++;
            H-=(a/w1)*b;
        }    
        W=w; H=h;
        while(H>0)
        {
            t2++;
            H-=(a/w1)*b;
        }       
        W-=w1;
        while(W>0)
        {
            t2++;
            W-=(b/h1)*a;
        }  
        if(t1<t2)
            k+=t1;
        else
            k+=t2;
        cout << k << endl;
        return 0;
    }
return 0;
}
1
vizapromo
18 / 11 / 6
Регистрация: 04.12.2012
Сообщений: 51
16.12.2012, 18:49  [ТС] #6
Спасибо!!))
0
16.12.2012, 18:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 18:49
Привет! Вот еще темы с решениями:

Определить количество способов укладки плиток на оставшиеся места
Задача G. Укладка плитки (Время: 1 сек. Память: 16 Мб Баллы: 100) В процессе...

Количество плиток, которое можно уложить на заданную площадь
Написать программу, вычисляющую количество плиток, которое можно уложить на...

Определить минимальное количество символов, которые нужно добавить в строку, чтобы получить палиндром
Здравствуйте, помогите пожалуйсто, был бы очень признателен хотя бы за идею...

Определить минимальное количество символов, которые нужно добавить в строку, чтобы получить палиндром
Определить минимальное количество символов, которые нужно добавить в строку,...


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

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

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