Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
vizapromo
 Аватар для vizapromo
18 / 11 / 1
Регистрация: 04.12.2012
Сообщений: 51
04.12.2012, 23:12     найти минимальное количество плиток которыми нужно покрыть пол. #1
Помогите пожалуйста с задачкой. Дана плошадь комнаты WxH и размеры кафеля A x B. Нужно найти минимальное количество плиток которыми нужно покрыть пол. Класть плитки нужно так, чтобы одна сторона плитки граничала максимум с одной плиткой и была параллельна одной из сторон комнаты. Поворачивать плитку нельзя, но резать вдоль одной из сторон можно, также разрезанный кусок можно разрезать на мелкие кусочки. Помогите пожалуйста.
Вот мой код, но не знаю где ошибка:

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 23:12     найти минимальное количество плиток которыми нужно покрыть пол.
Посмотрите здесь:

в каждой строке нужно найти минимальное слово C++
C++ Какое минимальное количество спичек нужно для того, чтобы построить в пространстве N кубов со стороной в одну спичку
количество плиток, которое можно уложить на заданную площадь C++
C++ массивы в с++(нужно найти минимальное значение массива)
C++ Определить минимальное или максимальное количество актеров, с которыми режиссер должен переговорить
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vizapromo
 Аватар для vizapromo
18 / 11 / 1
Регистрация: 04.12.2012
Сообщений: 51
15.12.2012, 15:40  [ТС]     найти минимальное количество плиток которыми нужно покрыть пол. #2
up up
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.12.2012, 18:29     найти минимальное количество плиток которыми нужно покрыть пол. #3
Контрпример:
7 5 3 2
правильный ответ: 6
У Вас выдает: 7.

Кстати если поменять местами входные данные, вот такой тест: 5 7 2 3, то Ваш код выдает правильный ответ.
vizapromo
 Аватар для vizapromo
18 / 11 / 1
Регистрация: 04.12.2012
Сообщений: 51
16.12.2012, 14:43  [ТС]     найти минимальное количество плиток которыми нужно покрыть пол. #4
Спасибо, можете исправить ошибку в моем коде??, а то я уже почти 2 недели несколько раз набирал новый код, никак не получается((. Исправляю в одном месте, получается ошибка в другом...(
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 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;
}
vizapromo
 Аватар для vizapromo
18 / 11 / 1
Регистрация: 04.12.2012
Сообщений: 51
16.12.2012, 18:49  [ТС]     найти минимальное количество плиток которыми нужно покрыть пол. #6
Спасибо!!))
Yandex
Объявления
16.12.2012, 18:49     найти минимальное количество плиток которыми нужно покрыть пол.
Ответ Создать тему
Опции темы

Текущее время: 21:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru