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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Rakaddar
0 / 0 / 0
Регистрация: 23.03.2009
Сообщений: 14
#1

Задача дед мороз (перебор) - C++

23.03.2009, 21:23. Просмотров 2079. Ответов 5
Метки нет (Все метки)

для начала вот задачка:

Подарки Деда Мороза
(Время: 1 сек. Память: 16 Мб Сложность: 27%)

Ириска весит X грамм, мандарин – Y грамм, пряник – Z грамм.

Требуется написать программу, которая определит, сколько различных вариантов подарков весом ровно W грамм может сделать Дед Мороз.
Входные данные

В единственной строке входного файла INPUT.TXT содержится четыре числа X, Y, Z и W (1 ≤ X, Y, Z ≤ 100, 1 ≤ W ≤ 1000).
Выходные данные

Выходной файл OUTPUT.TXT должен содержать одно целое число – количество вариантов подарков.
Пример
INPUT.TXT 10 25 15 40
OUTPUT.TXT 3
легкая задача, да? вот мое решение:

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
//dead moroz
#include <fstream>
#include <iostream>
 
using namespace std;
 
ifstream fin ("input.txt");
ofstream fout ("output.txt");
 
int main()
{
    int X,Y,Z,W,sum=0;
    fin>>X>>Y>>Z>>W;
    for (int i=0;i<=X;i++){
        for (int j=0;j<=Y;j++){
            for (int n=0;n<=Z;n++){
                if ((X*i)+(Y*j)+(Z*n)==W){sum++;}
                }
            }
        }
 
fout<<sum;
 
 
fin.close();
fout.close();
    return 0;
}
ну чего тут не правильно? по тестам не проходит на первом же тесте . объясните, может неправильно понял?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2009, 21:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача дед мороз (перебор) (C++):

Задача на рекурсивный перебор - C++
В выражении ((((1?2)?3)?4)?5)?6 . Нужно заменить знаки вопроса на знаки +-*/ чтобы в итоге получилось 35. Ну например: 1+2+3*4+5+6=35 ...

Перебор. Задача про ферзей. - C++
На шахматной доске требуется расставить 8 ферзей, что бы ни один ферзь не атаковал другого. Написал программу. Три дня писал). Что вы...

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника - PascalABC.NET
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он уплатил по 31 талеру, а за каждого быка по...

Задача на перебор - Java SE
Помогите решить задачу перебором. Задача: Если GREATPEOPLE + ITRANSITION ----------- DEVELOPMENT в позиционной...

задача на перебор вариантов - Алгоритмы
входные данные два массива 1 массив содержит суммы к примеру array(6,6,8) 2-массив содержит номиналы монет в котором ключ - это...

Задача на перебор вариантов - Pascal ABC
Помогите пожалуйста.Для заданного числа проверьте, является ли оно суммою квадратов двух чисел. Добавлено через 3 часа 14 минут ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
23.03.2009, 21:30 #2
потому что цикл по-моему должен быть таким

C++
1
2
3
4
5
6
7
8
    
    for (int i=0;i<=W;i++){
        for (int j=0;j<=W;j++){
            for (int n=0;n<=W;n++){
                if ((X*i)+(Y*j)+(Z*n)==W){sum++;}
                }
            }
        }
0
Rakaddar
0 / 0 / 0
Регистрация: 23.03.2009
Сообщений: 14
23.03.2009, 21:34  [ТС] #3
1 ≤ X, Y, Z ≤ 100
понял, судя по этому надо было сделать до 100. спс

Добавлено через 1 минуту 36 секунд
все время забываю про ограничения. спс всем. там еще надо с 1, а не с 0
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
23.03.2009, 21:53 #4
C++
1
2
3
4
5
6
7
8
9
    
int temp_X,temp_Y;
    for (int i=0;i<=W/X;i++){
        for (int j=0;j<=(W-(temp_X=X*i))/Y;j++){
            for (int n=0;n<=(W-temp_X-(temp_Y=Y*j))/Z;n++){
                if (temp_X+temp_Y+(Z*n)==W){sum++;}
                }
            }
        }
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
23.03.2009, 21:54 #5
да нет.. если можно набрать только одних падарков (например ирисок)
тогда с 0 циклы должны начинаться..

а.. ну следую твоим условиям.. тогда вот так вот

C++
1
2
3
4
5
6
7
    for (int i=1;i<=W;i++){
        for (int j=0;j<=W;j++){
            for (int n=0;n<=100;n++){
                if ((X*i)+(Y*j)+(Z*n)==W){sum++;}
                }
            }
        }
0
Rakaddar
0 / 0 / 0
Регистрация: 23.03.2009
Сообщений: 14
23.03.2009, 22:07  [ТС] #6
спс всем за помощь. Шоб прога прошла таймлимит я сделал квадратную сложность(два фора)
вот кон.вариант
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
//dead moroz
#include <fstream>
#include <iostream>
 
using namespace std;
 
ifstream fin ("input.txt");
ofstream fout ("output.txt");
 
int main()
{
    int X,Y,Z,W,sum=0;
    fin>>X>>Y>>Z>>W;
 
int temp_X,temp_Y,temp_Z;
    for (int i=0;i<=W/X;i++){
        for (int j=0;j<=(W-(temp_X=X*i))/Y;j++){
            temp_Y=Y*j;
            temp_Z=W-(temp_X+temp_Y);
            if(temp_Z%Z==0){sum++;}
            }
        }
 
fout<<sum;
 
 
fin.close();
fout.close();
    return 0;
}
Добавлено через 57 секунд
а на счет ограничения 1 или 0, то это хз, условия неправильное. начаиная с нуля все тесты проходятся
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2009, 22:07
Привет! Вот еще темы с ответами:

Задача на полный перебор. - Free Pascal
Расшифровать ребус, полученный в результате замены одинаковых букв одинаковыми цифрами: БЛОК*7=СТЕНА выводит похожие цифры,но всё равно...

задача на полный перебор - Turbo Pascal
найти сумму всех трёхзначных чисел, в записи которых все цифры нечётные.

Перебор чисел (Задача) - Pascal
Есть массив M с произвольными числами от одного до тысячи, N&lt;16. Нужно выяснить можно ли из чисел, складывая их получить число S. То...

Определить самый холодный день января и дни, когда был мороз - Pascal ABC
Даны показатели температуры воздуха ежедневно января. Определить САМЫЙ ХОЛОДНЫЙ день января и дни, когда БЫЛ мороза. . (+3; +2; +1, 0, -4;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.03.2009, 22:07
Ответ Создать тему
Опции темы

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