6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
1

Помогите исправить алгоритм (есть код)

12.11.2011, 21:56. Показов 1824. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я приблизительно представляю алгоритм, но не так что бы написать код. Вот условие задачи:
Высота стены N, ширина M длина рулона K, а ширина 1 метр, обои клеятся вертикально без горизонтальный стыков. Сколько рулонов нужно и сколько метров уйдет в отходы.

Добавлено через 41 минуту
Вот код:
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
#include <iostream>
 
using namespace std;
 
short int N, M, K, rul, ost= 0;
 
int main()
{
    cout << "Input N, M, K: ";
    cin >> N >> M >> K;
 
    if(M / (K%N) == 0)
        rul = M % (K%N);
    else
        rul = M % (K%N) + 1;
    if( M / (K%N) == 0)
        ost = K / N * (M%N);
    else
        ost = K / N * (M%N) + K - M/(K%N);
 
    cout << rul << " " << ost;
 
    return 0;
}
Тут явно что-то не так...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2011, 21:56
Ответы с готовыми решениями:

Помогите дописать( исправить код) алгоритм
Условие Некоторые компании являются совладельцами других компании, так как приобрели часть их...

Алгоритм цепочка (исправить код)
Условие Задан набор неповторяющихся пар (Ai,Aj), где Ai, Aj принадлежат множеству...

ПОМОГИТЕ ИСПРАВИТЬ КОД НА C++!
Задание прикрепил. в коде изложены все мои знания и то что мы проходили в школе почему он выводит...

Исправить код, реализующий алгоритм сортировки
Доброе утро. Сделал попытку реализовать функцию сортировки простым двухпутевым слиянием, но не...

30
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.11.2011, 22:11 2
Вот написал что-то. Прогоняйте. И нужно ещё защиту поставить. Чтобы отрицательного никто не вводил. Да и чтобы длина обоя не была меньше высоты стены.
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
#include <iostream>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    int i=1,k,p,s,m,temp,temp1=0;
    cout<<" Высота стены - K \n Длина Стены - M \n Длина Обоя - S \n Ширина Обоя - P \n\n K=";
    cin>>k;
    cout<<"\n M=";
    cin>>m;
    cout<<"\n S=";
    cin>>s;
    cout<<"\n P=";
    cin>>p;
    temp=s;
    while (m>0)
        {
            if (temp>=k) {temp=temp-k;m=m-p;}
            if (temp<k) {i++;temp1=temp+temp1;temp=s-k;m=m-p;}
        }
    cout<<"\n Остаток - "<<temp1<<"\n Рулонов Потрачено - "<<i<<endl;
    return 0;
}
Добавлено через 7 минут
Если на каком-то тесте сработает неверно, то попрошу вводимые и выводимые параметры.
1
277 / 150 / 25
Регистрация: 05.11.2011
Сообщений: 429
Записей в блоге: 1
12.11.2011, 22:13 3
Мой вариант:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
main() {
        double m = 35, n = 3.5, k = 20, x, x1, z;
        
        x = m*n/k;
        
        x1 = ceil(x);
        
        z = x1 - x;
        
        printf("рулонов: %.0f\nостаток: %f метров", x1, z);
}
Если можно проверти на ваших вариантах. Результат сообщите. Мне тоже интересно.
0
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 22:17  [ТС] 4
Спасибо, огромное. LEQADA, насколько я понял Ваша программа считает остаток от одного рулона. Кстати в условии задачи сказано что ширина рулона 1 метр, но возьму на заметку.
0
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.11.2011, 22:20 5
GhostVIRUS, нет, она суммирует остатки от каждого рулона. 20-ая строка
C++
1
temp1=temp+temp1;
0
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 22:23  [ТС] 6
Тогда, она неправильно досчитывает остаток.
Вот тест:
Высота стены - 6
Длина стены - 7
Дина рулона - 20
Ширина рулона - 1
0
277 / 150 / 25
Регистрация: 05.11.2011
Сообщений: 429
Записей в блоге: 1
12.11.2011, 22:28 7
Цитата Сообщение от GhostVIRUS Посмотреть сообщение
Тогда, она неправильно досчитывает остаток.
Вот тест:
Высота стены - 6
Длина стены - 7
Дина рулона - 20
Ширина рулона - 1
Код
рулонов: 3
остаток: 0.900000 метров
0
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 22:29  [ТС] 8
Общий остаток равен 18.
0
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.11.2011, 22:34 9
Прошу прощения. Исправил.
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
#include <iostream>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    int i=1,k,p,s,m,temp,temp1=0;
    cout<<" Высота стены - K \n Длина Стены - M \n Длина Обоя - S \n Ширина Обоя - P \n\n K=";
    cin>>k;
    cout<<"\n M=";
    cin>>m;
    cout<<"\n S=";
    cin>>s;
    cout<<"\n P=";
    cin>>p;
    temp=s;
    while (m>0)
        {
            if (temp>=k) {temp=temp-k;m=m-p;}
            if (temp<k) {i++;temp1=temp+temp1;temp=s-k;m=m-p;}
            if (m==0) {temp1=temp+temp1;}
        }
    cout<<"\n Остаток - "<<temp1<<"\n Рулонов Потрачено - "<<i<<endl;
    return 0;
}
Добавлено через 2 минуты
Ещё раз исправил
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
#include <iostream>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    int i=1,k,p,s,m,temp,temp1=0;
    cout<<" Высота стены - K \n Длина Стены - M \n Длина Обоя - S \n Ширина Обоя - P \n\n K=";
    cin>>k;
    cout<<"\n M=";
    cin>>m;
    cout<<"\n S=";
    cin>>s;
    cout<<"\n P=";
    cin>>p;
    temp=s;
    while (m>0)
        {
            if (temp>=k) {
                temp=temp-k;m=m-p;
                if (m==0) {temp1=temp+temp1;}
            }
            if (temp<k) {i++;temp1=temp+temp1;temp=s-k;m=m-p;}
            if (m==0) {temp1=temp+temp1;}
        }
    cout<<"\n Остаток - "<<temp1<<"\n Рулонов Потрачено - "<<i<<endl;
    return 0;
}
0
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 22:34  [ТС] 10
Огромное спасибо. Как бы и простая задача, но почему-то не додумался.
0
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.11.2011, 22:35 11
Не расслабляйтесь. Там может ещё есть ошибка ))
0
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 22:35  [ТС] 12
Что исправляет второе исправление?
0
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.11.2011, 22:41 13
Виноват. Так правильнее
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
#include <iostream>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    int i=1,k,p,s,m,temp,temp1=0;
    cout<<" Высота стены - K \n Длина Стены - M \n Длина Обоя - S \n Ширина Обоя - P \n\n K=";
    cin>>k;
    cout<<"\n M=";
    cin>>m;
    cout<<"\n S=";
    cin>>s;
    cout<<"\n P=";
    cin>>p;
    temp=s;
    while (m>0)
        {
            if (temp>=k) {temp=temp-k;m=m-p;}
            if (temp<k) {i++;temp1=temp+temp1;temp=s-k;m=m-p;}
            if (m==0) {temp1=temp+temp1;}
        }
    cout<<"\n Остаток - "<<temp1<<"\n Рулонов Потрачено - "<<i<<endl;
    return 0;
}
0
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 22:46  [ТС] 14
Мне даже сейчас стыдно, что пользуюсь чужим кодом.
0
277 / 150 / 25
Регистрация: 05.11.2011
Сообщений: 429
Записей в блоге: 1
12.11.2011, 22:48 15
До меня тоже сейчас дошло, тоже мне, я считал метры за рулоны
Исправил
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
main() {
        double m = 6, n = 7, k = 20, x, x1, z;
        
        x = m*n/k;
        
        x1 = ceil(x);
        
        z = k*(x1 - x);
        
        printf("рулонов: %.0f\nостаток: %f метров", x1, z);
}
Код
рулонов: 3
остаток: 18.000000 метров
0
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.11.2011, 22:49 16
Цитата Сообщение от GhostVIRUS Посмотреть сообщение
Мне даже сейчас стыдно, что пользуюсь чужим кодом.
Поймите алгоритм и упростите код. Его можно намного упростить.
0
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 22:57  [ТС] 17
Я алгоритм понял. Буду думать над упрощением.

Добавлено через 6 минут
Я нашел ошибку. Если рулонов нужно потратить 1, программа выведет число 2. Это из-за того, что мы объявляем переменную подсчитывающую кол-ство рулонов и инициализируем её как 1.

Добавлено через 19 секунд
Только вот как исправить?
0
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.11.2011, 23:00 18
Так?)
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
#include <iostream>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    int i=1,k,p,s,m,temp,temp1=0;
    cout<<" Высота стены - K \n Длина Стены - M \n Длина Обоя - S \n Ширина Обоя - P \n\n K=";
    cin>>k;
    cout<<"\n M=";
    cin>>m;
    cout<<"\n S=";
    cin>>s;
    cout<<"\n P=";
    cin>>p;
    temp=s;
    while (m>0)
        {
            if (temp<k) {i++;temp1=temp+temp1;temp=s-k;m=m-p;}
            if (temp>=k) {temp=temp-k;m=m-p;}
            if (m==0) {temp1=temp+temp1;}
        }
    cout<<"\n Остаток - "<<temp1<<"\n Рулонов Потрачено - "<<i<<endl;
    return 0;
}
0
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 23:05  [ТС] 19
Не пойму...
если rul = 1 то если решение - 1 рулон выведет два.
а если rul = 0 то все решения > 0 уменьшает на 1.
Вот код:
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
#include <iostream>
 
using namespace std;
 
short int N, M, K, rul, ost= 0;
 
int main()
{
    cout << "Input N, M, K: ";
    cin >> N >> M >> K;
 
    short int tempK = K;
    while(M>0)
    {
        if(tempK >= N)
        {
            tempK = tempK - N;
            M--;
        }
        if(tempK < N)
        {
            rul++;
            ost = tempK + ost;
            tempK = K - N;
            M--;
        }
        if(M == 0)
            ost = tempK + ost;
    }
    cout << rul << " " << ost;
 
    return 0;
}
N - высота стены
M - ширина стены
K - высота рулона
0
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.11.2011, 23:09 20
Поменяйте местами первый и второй циклы.))
0
12.11.2011, 23:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2011, 23:09
Помогаю со студенческими работами здесь

Строковые. помогите исправить код
Здравствуйте, проблемка есть // Выделить из строки str1 все слова, начинающиеся с согласной...

Есть код нужно исправить ошибки
есть задача: ввести размер квадратной матрицы и ее элементы. Элементы матрицы расположить в...

BOrland c for dos Исправить ошибку! код есть!
Прошу помощи!!!! Есть код.... Но проблема.....когда ввожу номер группы ( на разных студентов но...

Помогите исправить код заполнения матрицы случайными числами
Добрий день, виправте код пожалуйста, нужно что бы матрица заполнялася случайными числами ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru