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

Разбиения множества - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как данную программу реализовать при помощи классов http://www.cyberforum.ru/cpp-beginners/thread578982.html
как данную программу реализовать при помощи классов ~cpp //--------------------------------------------------------------------------- #include <vcl.h> #include <iostream.h> #pragma hdrstop
C++ Найти номер максимального элемента массива Помогите с программами 1. Найти номер максимального элемента массива. 2. Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами. 3. для заданной матрице размера 8 на 8 найти такие k, что к-я строка матрице совпадает с к-м столбцом. 4. Напишите программу которая считывает текст из файла и определяет сколько в этом слове. состоявших из не более чем 4-х... http://www.cyberforum.ru/cpp-beginners/thread578972.html
C++ Написать функцию, которая возвращает максимальный элемент одномерного массива
Написать функцию, которая возвращает максимальный элемент одномерного массива
C++ структуры содержащие члены-данные и члены- функции
Помогите пожалуйста!!!:cry: На основе данного входного файла составить список сотрудников учреждения, включив следующие данные: ФИО, год принятия на работу, должность, зарплата, рабочий стаж. Вывести в новый файл список сотрудников учреждения, удалив из него информацию о сотрудниках, принятых на работу в текущем году.
C++ Структуры http://www.cyberforum.ru/cpp-beginners/thread578955.html
Помогите решить задачу (решить задачу, используя структуру point для хранения координат точки: (множество точек задано на плоскости) Найти такую точку, что окружность радиуса R с центром в этой точке содержит минимальное число точек заданного множества.
C++ Работа с текстовыми файлами: Помогите пожалуйста решить задачу Дан текстовый файл. Напечатать все нечётные строки. подробнее

Показать сообщение отдельно
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
18.05.2012, 21:34     Разбиения множества
Можно и номера. Тогда это выглядит так:
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
void grouping(int n, int m,int m1, int* num)//num -- массив номеров точек, которые уже вошли в комбинацию, m1 -- их количество
{
if(m1==0)
{
for(int i=1; i<n-m+1; i++)//Это все частный случай того, что начинается через 2 else, добавлено для первого вызова функции, когда у нас еще пуст массив num
{
int* num1=new int[1];
num1[0]=i;
grouping(n,m,1,num1);
delete num1;
}
}
else if(m==m1)
{
//Здесь делаем расчеты центров масс частей и т.д., 1-я группа -- частицы, номера которых в массиве num, 2-я -- остальные.
}
else
{
int last=num[m1-1];//У нас частицы упорядочены, и если у нас уже была комбинация из 1,3,4 частицы, например, то комбинация из 1,4,3 нас уже не интересует, потому новые частицы имеет смысл присоейдинять к комбинации только начиная с num[m1-1]
for(int i=last+1; i<n-m+m1+1; i++)//Если номер будет больше, чем n-m+m1+1, то опять-таки комбинации будут повторяться
{
int* num1=new int[m1+1];
for(int j=0; j<m1; j++)
num1[j]=num[j];
num1[m1]=i;
grouping(n,m,m1+1,num1);
delete num1;
}
}
}
Вроде так. Компилировать не пробовал, экспромт, потому очень удивлюсь, если будет работать без ошибок. Пробуйте, пишите, будем разбираться.
Ах, и да, что пишем в основной программе:
C++
1
2
3
4
5
6
int n1=(n+1)/2;
for(int i=1; i<n1; i++)
{
int* num=new int[1];
grouping(n,i,0,num);
}
И есть одна проблемма, если n -- четное, то каждое разбиение пополам будет считаться дважды. Не знаю, как это исправить...
 
Текущее время: 11:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru