Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Помогите с программой!Работа с массивами. Составление слов. 
:(
    Опции темы
sergvas
Дата 17.12.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



Задана последовательность a1, а2, …, ак.. Из всех букв составляются всевозможные слова. 
Каких слов будет больше: у которых хотя бы одна из этих букв окажется на своем месте, или у которых ни одна не будет стоять на своем месте? 
Код



#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

 char *result;
   char enabled[20];
   char *enabled_cnt;
   int r=0;

void generate(char *pos) {
    int n;
  int printflag=1;
  *pos =0;

  for(n = 0; enabled[n];  n++) {
    if(enabled_cnt[n]  > 0) {
    *pos = enabled[n];
    enabled_cnt[n]--;
    generate(pos+1);
    enabled_cnt[n]++;
    printflag = 0;
    }
  }

  if(printflag)
  {
    printf("%s\n", result);
    int flagmy=0;
    for (int a=0;a<strlen(result);a++)
     if (result[a]==enabled[a]) flagmy=1;
     if (flagmy) r++;
     else r--;
  }
}


void main() {
  system("cls");
 
int b;
int q;

    printf("Vvedite stroku:\n");
   gets(enabled);
   for(b=0;b<strlen(enabled);b++){
       if( isalpha(enabled[b]) );
           
         else    {
           printf("Error!Press enter.\n");
           getchar();
           system("cls");
          
           break;
       }
   }


   q=strlen(enabled);
   result=new char [q];

   enabled_cnt=new char [q];
   for (int t=0;t<q;t++)
       enabled_cnt[t]=1;
  generate(result);
  if (r>0) printf ("\nNa svoem meste bol'she na %d", r);
  if (r<0) printf ("\nNa svoem meste men'she na %d", -r);
  if (r==0) printf("\nOdinakovo");
  getchar();
}

При вводе разных букв(qwer)вроде работает.Как сделать,если символы в последовательности повторяются(qwee)?


Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) sergvas - 17.12.2009, 23:02
PM MAIL   Вверх
bsa
Дата 17.12.2009, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



можно узнать полный текст задания?
PM   Вверх
sergvas
Дата 17.12.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



полнее некуда...такой у нас препод-типа сам догадайся
PM MAIL   Вверх
bsa
Дата 17.12.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



минимальное количество букв в слове задано? слово должно содержать все введенные символы?


M
bsa
Отформатируй свой код. Как, написано тут

PM   Вверх
sergvas
Дата 17.12.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



минимальное количество букв в слове задано?
не задано.
слово должно содержать все введенные символы?
все слова составляются из всех введенных символов.
PM MAIL   Вверх
bsa
Дата 17.12.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



sergvas, тогда какие проблемы вообще?
Легко делается рекурсией:
1. создаешь новый список "слов"
2. если размер массива 1 символ, то добавляешь его в список без изменений и выходишь из функции, иначе:
3. берешь i-й символ (0 <= i < n) и исключаешь из массива (массив должен уменьшиться на 1)
4. вызывая рекурсивно эту функцию (параметры - массив символов, результат - список слов) получаешь список слов, в каждое из которых вставляешь в i-ю позицию исключенный символ и добавляешь в список слов, который создал в п.1
5. повторяешь цикл для всех i
6. возвращаешь созданный в п.1 список.
PM   Вверх
sergvas
Дата 17.12.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



А как это реализовать?
PM MAIL   Вверх
bsa
Дата 17.12.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



руками
PM   Вверх
sergvas
Дата 17.12.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



логично...но вот как-то не получилось у меня,поэтому и написал
PM MAIL   Вверх
bsa
Дата 17.12.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



sergvas, что именно? Какие возникли трудности?
PM   Вверх
sergvas
Дата 17.12.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



enabled_cnt[t]=1; этот массив в моей проге(показывает сколько раз встречается каждая буква,в моей проге все по одному) заполняется в моем случае всеми еденицами,а мне как-то нужно,я хз как,чтобы на входе проверялось есть ли одинаковые буквы,потом заполнялся соответствующим образом этот массив,ну и т.д....
PM MAIL   Вверх
bsa
Дата 17.12.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



sergvas, а ты не думал, что твой алгоритм не очень верен? Может стоит переписать используя мой? Тем более, что мой подразумевает всего одну функцию плюс пару-тройку на обслуживание списков (создание, добавление, удаление).
PM   Вверх
sergvas
Дата 17.12.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



да я уже думал об этом...только времени у меня в обрез...не успею скорее всего,если начну переписывать
PM MAIL   Вверх
bsa
Дата 18.12.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



sergvas, ты считаешь, что проще исправить нерабочий алгоритм, чем реализовать в 20-40 строчек новый? Да ты легких путей не ищешь.  smile 
PM   Вверх
sergvas
Дата 18.12.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



Ты типа пошутить решил,Петросян?
10 строчек кода и всё заработало smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.