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

генерация строки из символов А,В,С - C++

Восстановить пароль Регистрация
 
arkanoid555
0 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 5
31.03.2013, 19:01     генерация строки из символов А,В,С #1
вот код задачи.
условие:
нужно сгенерировать строку(N<=100), состоящую из букв A,B,C такую, чтобы не было одинаковых поднизов(N=6
ABACBA-верно
AABCAC or ABABCB or BCABCA-неверно


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
#include <iostream>
#include <string>
#include <ctime>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
const int N=10;
void create(char a[]);
int check(char red[]);
char b[3]={'A','B','C'};
void main()
{
    char red[N+1];
    int i,flag(0);
    do
    {
        create(red);
        flag=check(red);
    }
    while(flag!=0);
    for(i=0;i<N;i++)
        cout<<red[i];
    cout<<endl;
}
void create(char a[])
{
    int i,k;
    srand(time(NULL));
    for(i=0;i<N;i++)
    {
        k=rand()%3;
        a[i]=(char)b[k];
    }
    for(i=0;i<N;i++)
        cout<<a[i];
    cout<<endl;
}
int check(char red[])
{
    int i,flag(0),k(1);
        for(i=0;i<N-1;i++)
        {
            if(red[i]==red[i+1])
                flag=1;
            if(red[i]==red[i+2] && red[i+1]==red[i+3])
                flag=1;
            if(red[i]==red[i+3] && red[i+1]==red[i+4] && red[i+2]==red[i+5])
                flag=1;
        }
 
    return flag;
}
может у кого-то будут другие идеи относительно генерации такой строки

заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 19:01     генерация строки из символов А,В,С
Посмотрите здесь:

Из символов введенной строки сформировать две строки - из цифр и букв C++
C++ генерация рандомных символов
C++ Генерация таблицы из строки
C++ строки С++(После каждого символов '.' вставить два пробела, подсчитать, сколько раз пара символов 'C+' стоит перед символом 'D')
C++ Удалить конец строки символов. Ввести кол-во удаляемых символов , вывести результат ,String ,задачка,С++
C++ Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
C++ Функция перезаписывает символы строки заданным количеством символов другой строки
C++ Получить из строк новую строку, содержащюю первые N1 символов строки S1 и последнии N2 символов строки S2

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
01.04.2013, 07:55     генерация строки из символов А,В,С #2
arkanoid555, ваш подход в корне не верный. Какова вероятность того, что случайным образом сформируется нужная вам последовательность? Даже на 6 элементов это маловероятно.
Я не утверждаю что мой подход верен, ибо я до конца так и не уловил все тонкости задания, но вот что у меня получилось:
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
#include <iostream>
#include <cstdlib>
 
bool create(char str[], size_t length)
{
   static const char CChar[] = {'A', 'B', 'C'};
   static const size_t CCharSize = sizeof(CChar) / sizeof(*CChar);
 
   str[0] = CChar[0];
 
   bool find = true;
 
   for (size_t i = 0; (i < length-1) && find; ++i)
   {
      find = false;
 
      size_t j = 0;
      for (; (j < CCharSize) && !find; ++j)
      {
         find = (str[i] != CChar[j]);
 
         if (find && (i > 1) && (str[i-2] == str[i]) && (str[i-1] == CChar[j]))
         {
            find = false;
         }
 
         if (find && (i > 4) && (str[i-5] == str[i-2]) && (str[i-4] == str[i-1]) && (str[i-3] == CChar[j]))
         {
            find = false;
         }
      }
 
      if (find)
      {
         str[i+1] = CChar[j-1];
      }
   }
 
   return find;
}
 
int main()
{
 
   char str[101] = { 0 };
   size_t length;
 
   do
   {
      std::cout << "input length (n <= 100): ";
      std::cin >> length;
   }  while (100 < length);
 
   if (create(str, length))
   {
      std::cout << str << std::endl;
   }
   else
   {
      std::cout << "not created" << std::endl;
   }
 
   system("pause");
 
   return 0;
}
генерация строки из символов А,В,С

Бинарник + исходник: program.7z
Yandex
Объявления
01.04.2013, 07:55     генерация строки из символов А,В,С
Ответ Создать тему
Опции темы

Текущее время: 23:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru