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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2009, 23:11   #1
Fidel157
Новичок
Джуниор
 
Регистрация: 06.07.2009
Сообщений: 2
По умолчанию Помогите с перебором вариантов.

Здрасте гении программисты. Прошу у Вас помощи.
Суть в том нужна программа, которая перебирала бы все возможные варианты расположения ну, например звёздочек "*" в массиве.
Сам массив состоит из 16 символов. Притом звёздочек в массе должно быть 3. При выводе на экран свободные символы массива заполнить ну, например “$” или другим символом.
Уже час парюсь и допереть логику не могу, написал с одной звёздочкой очень быстро а с 2 уже не выходит, про 3 так вообще боюсь думать. Помогите плиз.
код то что пока получилось, наверное не очень кратко, я пока только учусь.
Код:
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
int t,p;
t=1;
p=0;
char A[]="################";
for (int r=0;r<15;r++)
{
t++;
A[t-1]='*';
cout <<A<<"\n";
A[t-1]='#';
}
getchar();
return 0;
}

Последний раз редактировалось Fidel157; 06.07.2009 в 23:17.
Fidel157 вне форума Ответить с цитированием
Старый 06.07.2009, 23:31   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну вот так через рекурсию можно:
Код:
#include <stdio.h>
#include <conio.h>

void fun(char *A,const int N, const int M, int tekM, int tekN)
{
 if(tekN==N)   // если дошли до конца строки
  {
   if(tekM==M)  // если использовали все звездочки, то..
   {
    A[N]=0;
    printf("%s\n",A);  // выводим результат
   }
   return;
  }
 
 if(tekM<M)  // если еще есть звездочки в запасе
  {
     A[tekN]='*';   // ставим звездочку
     fun(A,N,M,tekM+1,tekN+1);  // и переходим к следующему символу
  } 
   A[tekN]='$'; 
   fun(A,N,M,tekM,tekN+1); 
}

int main()
{
const int N = 15; // количество символов
const int M = 3; // количество звездочек
char A[N+1];

fun(A,N,M,0,0);

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.07.2009, 23:55   #3
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

ну и второй вариант - линейный.

Код:
#include "stdio.h"
#include "string.h"

#define SIZE  16

void doWork() {
	int i, j, k;
	char mass[SIZE+1] = "$$$$$$$$$$$$$$$$\0";

	for (i = 0; i < SIZE; i++) {
		mass[i] = '*';
		for (j = i + 1; j < SIZE; j++) {
			mass[j] = '*';
			for (k = j + 1; k < SIZE; k++) {
				mass[k] = '*';
				printf("%s\n", mass);
				mass[k] = '$';
			}
			mass[j] = '$';
		}
		mass[i] = '$';
	}
}


int main() {
	doWork();
	return 0;
}
vvviperrr вне форума Ответить с цитированием
Старый 07.07.2009, 10:26   #4
Fidel157
Новичок
Джуниор
 
Регистрация: 06.07.2009
Сообщений: 2
По умолчанию

Спасибо, оба работают, и так как надо, буду дальше развиваться.
Fidel157 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исследование алгоритма перебора вариантов с отсечением )помогите ,дайте нормальный совет Baralgin91 Помощь студентам 0 29.06.2009 17:50
Перебор всех возможных вариантов [MI_nor] Общие вопросы C/C++ 9 01.04.2009 21:17
плз помогите легко просто надо несколько вариантов решения sp.caster Помощь студентам 8 29.01.2009 18:40
Перебор вариантов... или что-то такое elsin Общие вопросы Delphi 3 15.01.2009 22:13