Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2018, 13:32   #1
Progway
 
Регистрация: 10.04.2016
Сообщений: 8
По умолчанию Нумерация размещений без повторений и поиск номера по размещению

Доброго времени суток, очень нужна помощь, я новичок в c++, прощу помогите с задачей!
По условию задачи неободимо построить размещение без повторений по заданому номеру и найти номер по размещению без повторений.
У меня есть коды отдельных функций для поиска размещения по омеру и наборот, не получается правильно оформить ... для вывода результата, вылазиют ошибки. Прошу, покажите, пожалуйста, как правильно надо это оформить!

с++
Код:
#include <iostream>
#include <string>
using namespace std;

int placement_amount(int n, int m) {
	int res = 1;
	for (int i = n; i >= n - m + 1; --i) {
		res *= i;
	}
	return res;
}
void gen_placement_by_num(int num, int n, int m, vector<int> &mas) {
	vector<bool> usd(n, false);
	int _n = n - 1, _m = m - 1;
	for (int i = 0;i<m;++i) {
		int block_cnt = num / placement_amount(_n, _m);
		num -= block_cnt * placement_amount(_n, _m);
		int pos = 0;
		++block_cnt;
		while (block_cnt) {
			if (!usd[pos])
				--block_cnt;
			++pos;
		}
		usd[pos - 1] = true;
		mas[i] = pos;
		--_n; --_m;
	}
}
int get_num_by_placement(const vector<int> &mas, int n, int m) {
	vector<bool> usd(n, false);
	int res = 0;
	int _n = n - 1, _m = m - 1;
	for (int i = 0;i<mas.size();++i) {
		int amount = 0;
		for (int j = 0;j<n;++j) {
			if (!usd[j]) amount++;
			if (mas[i] == j) {
				int ampt = (amount - 1) * placement_amount(_n, _m);
				res += (amount - 1) * placement_amount(_n, _m);
				usd[j] = true;
			}
		}
		usd[mas[i]] = true;
		--_n; --_m;
	}


int main() {
	int n, m, num;
	cin >> n;
	cin >> m;
	cin >> num;
	mas = new char[n];
	usd = new int[n];
	for (int i = 0; i < m; i++)
	{
		mas[i] = 1; 
	}
	return 0;
}
Progway вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нумерация размещений без повторений Progway Общие вопросы C/C++ 2 14.10.2018 18:56
Последовательность чисел без повторений Вероника99 Помощь студентам 6 27.05.2015 17:11
Как снять ограничение на число повторений набора номера ?? Generatorss Операционные системы общие вопросы 2 29.10.2012 19:09
генерация сочетаний без повторений nowaalex Общие вопросы C/C++ 8 01.11.2010 00:29
Массив без повторений Uzenec Помощь студентам 2 17.01.2008 08:23