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

Полный перебор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В целочисленной прямоугольной матрице определить количество строк , не содержащих ни одного элемента http://www.cyberforum.ru/cpp-beginners/thread79940.html
Привет посоветовали ваш форум. Помогите разобраться с массивом . с циклами я кое как разобрался но массивы для меня далеки. Прошу помощи написать 3 задачи. №1 Вычислить произведение в одномерном массиве , состоящем из 8 целых элементов. №2 Написать программу , которая проверяет , представляют ли элементы введенного с клавиатуры одномерного массива возрастающую последовательность. №3 В...
C++ Класс товары. Привет! Народ, помогите с классами на С++. Необходимо написать класс товары с полями наименование товара, дата оформления, цена, количество, номер накладной. И реализовать методы изменения цены, количества и вычисления стоимости (должен возратить значение стоимости в виде строки!). Начал делать, одни ошибки(((Плиз, подскажите, почему у меня не создается объект ice, что здесь не так?! #include... http://www.cyberforum.ru/cpp-beginners/thread79930.html
C++ Найти все прямоугольные подмассивы в матрице
Как найти все прямоугольные подмассивы в массиве A?
Подскажите в чем косяк? C++
а) Сформировать матрицу А с размерами n x m и присвоить ее элементам значения aij=F(xi, yj), где F(xi,yj)=8,9xiyj+2,3xi2-8xiyj2, xmin≤xi≤xmax, i=1÷n, ymin≤yj≤ymax, j=1÷m. Вводимые данные: xmin, xmax,, n, m, ymin, ymax. б) Получить из матрицы А матрицу В путем циклического сдвига столбцов матрицы А на k элементов влево (k ≤ m). Затем сложить матрицы: С=А+В. Вывести на печать матрицы А, В, С....
C++ отлов буквенной клавиши... http://www.cyberforum.ru/cpp-beginners/thread79917.html
Доброго времени суток! хочу написать программку, но возник вопрос, как отловить нажатие буквенной клавиши, например клавиши с буквой Р, как я посмотрел то виртуальными клавишами тут не обойтись... помогите плиз...
C++ Представление n Дано натуральное n. Можно ли представить его в виде суммы трех квадратов натуральных чисел, если млжно, то указать все представления n в виде квадратов натуральных чисел. для примера: пользователь вводит число 5 Для него программа выводит результат: n=0*0+1*1+2*2 n=0*0+2*2+1*1 n=1*1+0*0+2*2 n=1*1+2*2+0*0 n=2*2+0*0+1*1 n=2*2+1*1+0*0 подробнее

Показать сообщение отдельно
Kissa30rus
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 5

Полный перебор - C++

25.12.2009, 23:15. Просмотров 1599. Ответов 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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//////////////////////////////////////////////////////////////////////
//Лабораторная работа №5;
//Дано множество целых чисел. Требуется разбить множество на две 
//части суммы элементов которых равны. Если нельзя провести разбиение,
//выдать сообщение об этом.
//////////////////////////////////////////////////////////////////////
#include <fstream>
#include <iostream>
// Множество
#include <set>
#include <numeric>
 
using namespace std;
 
//Показывает какие элементы входят в текущую сумму
unsigned char *schetchik;
int kakoi;
 
// Добавляет элемент если в schetchik на месте kakoi стоит 1
int sum(int summa, int chislo)
{
    return schetchik[kakoi++] == 1 ? summa + chislo : summa;
}
 
int main()
{
    set<int,less<int>> mnogestvo;
    ifstream fin("input.txt");
    int n, i, temp, m;
    __int64 chto_nado;
    
    // Количество элементов и какое число надо попробовать получить
    fin >> n;
    fin >> chto_nado;
 
    // Создаем множество и заполняем его
    for (i = 0; i < n; ++i)
    {
        fin >> temp;
        mnogestvo.insert(temp);
    }
 
    m = mnogestvo.size();
    // Создаем счетчик для двоичного перебора и обнуляем его
    schetchik = new unsigned char [m];
    memset(schetchik,0,m);
 
    // Выход будет при обнаружении переполнения счетчика
    while(1)
    {
        ++schetchik[m-1];
        
        // Следит за правильностью двоичног числа
        for (i = m-1; i > 0; --i)
        {
            if (schetchik[i] == 2)
            {
                schetchik[i] = 0;
                ++schetchik[i-1];
            }
            else
            {
                break;
            }
        }
 
        // Перед началом высчета новой сумму, начинаем суммировать то с нулевого элемента
        kakoi = 0;
 
        // Если можно то все
        if (accumulate(mnogestvo.begin(),mnogestvo.end(),0,sum) == chto_nado)
        {
            cout << "Mozno!";
            cout<<endl;
            cout<<"Najmite 0 dlya vixoda...";
            delete [] schetchik;
            cin >> i;
 
            return 0;
        }
 
        if (schetchik[0] == 2)
        {
            break;
        }
    }
    
    delete [] schetchik;
 
    cout << "Nelza!";
    cout<<endl;
    cout<<"Najmite 0 dlya vixoda...";
    cin >> i;
 
    return 1;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru