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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2012, 22:48   #1
Александр За...
Новичок
Джуниор
 
Регистрация: 09.10.2012
Сообщений: 2
Вопрос Варианты и их создание.

Доброе время суток.
Я не программист, и прошу у Вас помощи.
Есть 16 "слов". Нужно составить все варианты, с условием 4 "слова" в 1 "строке", разделитель "-"(тире). Кто сможет помочь, пошите на marazmru@bigmir.net
Спасибо.

"Слова"
POKH NPGH ACJU HHGT
NPGH QWOP MYTC ZBHJ
XOMF EGTD LILO SEBK
PLXR BXXG VGUO IULV
Александр За... вне форума Ответить с цитированием
Старый 09.10.2012, 22:59   #2
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

все варианты,с условием 4 "слова" в 1 "строке"
вот тут как бы хочется утоснить
все варианты из 16 , а вывод 4 х 4
или все варианты из 4 в каждой строке
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 09.10.2012, 23:04   #3
Александр За...
Новичок
Джуниор
 
Регистрация: 09.10.2012
Сообщений: 2
По умолчанию

Все варианты из 4 в каждой строке
Александр За... вне форума Ответить с цитированием
Старый 09.10.2012, 23:50   #4
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

не уверен
Код:
 	program Pr;
   Uses crt;
   const n=4;
	var X:array [1..n,1..n] of string;
	   i:integer;
	   
 	  procedure Kmb(num,k:integer);
	    var j:integer;
	    procedure Swap(var a,b:string);
	      var c:string;
	    begin c:=a;a:=b;b:=c end;
	  begin

	    if k=N then
	      begin for j:=1 to N do
	      
       begin if j<N then write(X[num,j],'-')else write(X[num,j]); end;
        write(' ') end
	    else
	      for j:=k+1 to N do
		begin
		  Swap(X[num,k+1],X[num,j]);
		  Kmb(num,k+1);
		  Swap(X[num,k+1],X[num,j])
		end;
	  end;

	begin
X[1,1]:='POKH'; X[1,2]:='NPGH';X[1,3]:= 'ACJU';X[1,4]:= 'HHGT';
//X[1,1]:='1'; X[1,2]:='2';X[1,3]:= '3';X[1,4]:= '4';
X[2,1]:= 'NPGH';X[2,2]:= 'QWOP'; X[2,3]:= 'MYTC';X[2,4]:= 'ZBHJ';
X[3,1]:= 'XOMF';X[3,2]:= 'EGTD';X[3,3]:= 'LILO';X[3,4]:= 'SEBK';
X[4,1]:= 'PLXR';X[4,2]:= 'BXXG';X[4,3]:= 'VGUO';X[4,4]:= 'IULV';

    for i:=1 to N do
	  Kmb(i,0);

	end.
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 10.10.2012, 00:04   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Не уверен
Код:
const
    n = 16;
var
    a : array [1..n] of string[4] = ('POKH', 'NPGH', 'ACJU', 'HHGT', 'NPGH', 'QWOP', 'MYTC', 'ZBHJ', 'XOMF', 'EGTD', 'LILO', 'SEBK', 'PLXR', 'BXXG', 'VGUO', 'IULV');
 
procedure print(s : string[4]; k : integer);
var
    i : integer;
begin
    if k = 5 then
        writeln(a[ord(s[1])] + '-' + a[ord(s[2])] + '-' + a[ord(s[3])] + '-' + a[ord(s[4])])
    else
        for i := 1 to n do
        begin
            s[k] := chr(i);
            print(s, k + 1);
        end;
end; 
    
BEGIN
    print('0000', 1);
END.
11:40 Update Вариант без повторений слов:
Код:
const
    n = 16;
var
    a : array [1..n] of string[4] = ('POKH', 'NPGH', 'ACJU', 'HHGT', 'NPGH', 'QWOP', 'MYTC', 'ZBHJ', 'XOMF', 'EGTD', 'LILO', 'SEBK', 'PLXR', 'BXXG', 'VGUO', 'IULV');
 
procedure print(s : string[4]; k : integer);
var
    i : integer;
begin
    if k = 5 then
        writeln(a[ord(s[1])] + '-' + a[ord(s[2])] + '-' + a[ord(s[3])] + '-' + a[ord(s[4])])
    else
        for i := 1 to n do
            if pos(char(i), s) = 0 then
            begin
                s[k] := chr(i);
                print(s, k + 1);
            end;
end; 
    
BEGIN
    print('0000', 1);
END.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.10.2012 в 11:43.
BDA вне форума Ответить с цитированием
Старый 10.10.2012, 02:06   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Александр За...

Есть 16 "слов". Нужно составить все варианты, с условием 4 "слова" в 1 "строке", разделитель "-"(тире)

C++

Код:
#include <iostream>
#include <locale>

#include <iterator>
#include <algorithm>

#include <vector>
#include <string>

#include <boost/assign.hpp>
using boost::assign::operator+=;

namespace {

	template <typename I>
	bool Z(const I u, I k, const I v)
	{
		if (u == v || u == k || v == k) return false;
		I x = u, y = v; ++x;
		if (v == x) return false;
		x = v; --x; x = k; --y;
		while (u != x) if (*--x < *y)
		{
			I j = k;
			while (!(*x < *j)) ++j;
			std::iter_swap(x,j);
			++x; ++j; y = k;
			std::rotate(x,j,v);
			while (v != j) ++j, ++y;				
			std::rotate(k,y,v);
			return true;		
		}
		std::rotate(u,k,v);
		return false;
	}
}

int main()
{
	setlocale(LC_ALL, "");

	std::vector<std::string> v;
	v +=
		"POKH", "NPGH", "ACJU", "HHGT",
		"NPGH", "QWOP", "MYTC", "ZBHJ",
		"XOMF", "EGTD", "LILO", "SEBK",
		"PLXR", "BXXG", "VGUO", "IULV"; 

	while (Z(v.begin(), v.begin() + 4, v.end()))
	{
		typedef std::ostream_iterator<std::string> O;
		std::copy(v.cbegin(), v.cbegin() + 3, O(std::cout, "-"));
		std::cout << v[3] << std::endl;
	}

	std::cin.get();

	return 0;
}
Пример работы: http://liveworkspace.org/code/6aa1e4...da40adecf27366
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Варианты решений Ghost of Night Помощь студентам 5 22.01.2012 21:42
Варианты по информатике за WMZ Kiuset Фриланс 9 26.05.2011 16:54
ВАРИАНТЫ ПАРСИНГА Vova777 Общие вопросы Delphi 2 04.09.2010 23:51
Варианты курсора(Delphi) IGoDoVaN Помощь студентам 25 18.02.2009 21:48