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

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

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

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

23.03.2009, 21:23. Просмотров 1896. Ответов 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;
}
ну чего тут не правильно? по тестам не проходит на первом же тесте . объясните, может неправильно понял?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2009, 21:23     Задача дед мороз (перебор)
Посмотрите здесь:

Перебор матриц C++
C++ Полный перебор
Перебор списка C++
Перебор C++
Перебор. Задача про ферзей. C++
Cудоку перебор C++
C++ Перебор символов
Перебор значений C++
C++ перебор значений
Задача на рекурсивный перебор C++
C++ Cделать перебор id-ов
Перебор C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 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++;}
                }
            }
        }
Rakaddar
0 / 0 / 0
Регистрация: 23.03.2009
Сообщений: 14
23.03.2009, 21:34  [ТС]     Задача дед мороз (перебор) #3
1 ≤ X, Y, Z ≤ 100
понял, судя по этому надо было сделать до 100. спс

Добавлено через 1 минуту 36 секунд
все время забываю про ограничения. спс всем. там еще надо с 1, а не с 0
Humanitis
 Аватар для 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++;}
                }
            }
        }
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 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++;}
                }
            }
        }
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, то это хз, условия неправильное. начаиная с нуля все тесты проходятся
Yandex
Объявления
23.03.2009, 22:07     Задача дед мороз (перебор)
Ответ Создать тему
Опции темы

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