Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 14.10.2009
Сообщений: 22

Создание n-символьной последовательности, состоящей из совокупности 3 символов

11.12.2009, 00:10. Показов 3616. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста исправить код программы. ни как не получается заставить её работать.

Надо написать программу создания n-символьной последовательности, состоящей из совакупности 3 символов (например: "0", "1", "2" или "a", "b", "с" ), в которой нет двух смежных идентичных последовательностей. Для n=11 последовательность может иметь вид: "01020120210".

Алгоритм такой: Берётся первый символ произвольно, второй берётся тоже произвольно и проверяется с первым, не создаётся ли смежная последовательность (проверку делает функция check() ) если не создаётся то программа приписывает следующий символ, опять проверяется. Но наступает такой момент что все 3 символа не подходят, тогда программа возвращается назад и изменят предыдущие не равные тому который был удалён.

Функция check работает верно на 100% я проверял её отдельно с уже введёной строкой (она кстати проверяет смежные последовательности только с последним символом в строке). Прошу не обращать внимание на множество printf'ов - я пытался найти проблему.

Вот сам код:

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
//#include <math.h>
#include <ctype.h>
 
int check(char* str)
 {
  char* p1;char* p2;
  int i,j1,j2,m,n,last,k;
  last=strlen(str)-1;
  for(i=0,k=1;(i<=last/2)&&(k!=0);i++)
   {
    j1=last-2*i-1;j2=last;m=0;n=i;
    for(;j2>j1;j2--,j1++,m++,n--)
     {
      p1[m]=str[j1];
      p2[n]=str[j2];
     }
    p2[i+1]=p1[i+1]='\0';
    k=strcmp(p2,p1);
    printf("\n%s\t%s\t%s\tk=%d",str,p1,p2,k);
   }
 
  return k;
 }
 
void main()
 {
  randomize();
  char* a;char* b;char *c;char* str,del;clrscr();int k,n,last;
  printf("\nВведи длину последовательности: ");
  gets(a);gets(b);gets(c);
  scanf("%d",&n);
  printf("\nВведите 3 символа использующиеся в ней: ",a);
 
  strcat(str,a);
    printf("\n------\t%s",str);
  del=' ';
  for(last=1;last<n;last++)
   {
    k=0;
    printf("\n------\t%s",str);
    printf("\n &&& %d",last);
    if(str[last]!=del)
     {
      strcat(str,a);k++;
      if(check(str)==0)
       {str[last]=0;k--;}
       printf("\n 1&&& %d",last);
     }
    if(str[last]!=del&&k==0)
     {
      strcat(str,b);k++;
      if(check(str)==0)
       {str[last]=0;k--;}
       printf("\n 2&&& %d",last);
     }
     if(str[last]!=del&&k==0)
     {
      strcat(str,c);k++;
      if(check(str)==0)
       {
        str[last]=0;k--;
       }  printf("\n 3&&& %d",last);
     }
     printf("   %d",k);
      if(k==0)
       {
        str[last]=del;
        str[last-1]=0;
        last-=2;
       }
       else del=' ';
   }
  str[n]='\0';
  puts(str);
  getch();
 }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2009, 00:10
Ответы с готовыми решениями:

Создание n-символьной последовательности, состоящей из совокупности 3 символов
Помогите пожалуйста! Надо написать программу создания n-символьной последовательности, состоящей из совакупности 3 символов...

В строке, состоящей из символов '0' или '1', подсчитать длину самой длинной последовательности, состоящей из '1'
Дана строка S, состоящая только из символов '0' или '1'. Подсчитать длину самой длинной последовательности, состоящей только из '1'. ...

Составить все варианты подстрок символов из строки, состоящей не более чем из 3 символов
Народ, здравствуйте! Ума ни приложу как решать эту задачу. Помогите, пожалуйста! Заранее благодарен.

11
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
11.12.2009, 00:21
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
//main
a[0] = rand() % 3;
int i = 1;
while(--n) {
   a[i] = rand() % 3;
   if (a[i] == a[i-1]) {
      --i;
      ++n
   }
}
0
0 / 0 / 0
Регистрация: 14.10.2009
Сообщений: 22
11.12.2009, 00:28  [ТС]
И что это такое? Че то не то совсем. может поподробней уж тогда?
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
11.12.2009, 00:39
выбираем 1-ую цыфру рандомно, потом уменьшаем количество цифр, которые нужно дописать до тех пор пока не достигнем 0 и ивеличиваем индекс последнего элемента, при этом проверяем если мы взяли рандом который повторяэтся, значит увеличеваем количество оставшихся цыфр и уменьшаем текущий индекс
0
0 / 0 / 0
Регистрация: 14.10.2009
Сообщений: 22
11.12.2009, 00:40  [ТС]
Мне надо строки использовать.!!!!
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
11.12.2009, 00:42
C++
1
a[i] = b[rand() % 3]; // b - это ваш масив возможных симвлов, из которых состоит строка
0
0 / 0 / 0
Регистрация: 14.10.2009
Сообщений: 22
11.12.2009, 00:50  [ТС]
Блин а можно как нибудь мой код исправить а не предлогать новый способ решения.

Добавлено через 6 минут
Она правильно и не работает даже!

Добавлено через 1 минуту
ты въедь в задачу, она не такая простая.
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
11.12.2009, 11:07
Ну понятно что не работает. Не вижу тут генерации случайной величины. У тебя формируется вполне конкретная последовательность, всегда одна и та же, и когда ты возвращаешься к предыдущей строке программа ее опять генерирует точно так же.
А ввод входных данных вообще перепутан....
0
0 / 0 / 0
Регистрация: 14.10.2009
Сообщений: 22
11.12.2009, 11:09  [ТС]
Да я решил убрать генерацию случайных чисел. А на счёт ввода данных согласен, но я не знаю как исправить! напишите пожалуйста что нужно изменить.
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
11.12.2009, 11:22
Ну ввод хотя бы так:
C
1
2
3
4
  printf("\nВведи длину последовательности: ");
  scanf("%d",&n);
  printf("\nВведите 3 символа использующиеся в ней: ",a);
  gets(a);gets(b);gets(c);
А как вообще без генерации случайных чисел эта программа должна работать?????
Вы алгоритм работы программы внимательно изучите сначала!
К тому же функция main вообще непонятно чем занимается, но точно делает не то, что написано в условии.
0
0 / 0 / 0
Регистрация: 14.10.2009
Сообщений: 22
11.12.2009, 11:28  [ТС]
Без генерации случайных чисел она бутет строить посдовательномть указанную в примере. Но проблема то не в том что данные вводятся неправильно. а в функцию посылаются не те данные которые нужно, посылается не вся строка, а по 1 по 2 символа, как бутто функция strcat не работает.
0
0 / 0 / 0
Регистрация: 29.12.2020
Сообщений: 1
29.12.2020, 13:35
Ребят, по итогу у кого-нибудь есть сделанная полностью программа, если есть скиньте пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2020, 13:35
Помогаю со студенческими работами здесь

В заданной символьной строке, состоящей из букв и чисел, найти сумму чисел
2. Задана символьная строка, состоящая из букв и чисел. Напечатать сумму чисел.

Подсчитать длину самой длинной последовательности, состоящей только из '1'
1. Дана строка S, состоящая только из символов '0' или '1'. Подсчитать длину самой длинной последовательности, состоящей только из '1'. ...

Подсчитать длину самой длинной последовательности, состоящей только из '1'.
Дана строка S, состоящая только из символов '0' или '1'. Подсчитайте длину самой длинной последовательности, состоящей только из '1'. ...

Поиск слов в строке состоящей из русских символов.
Здравствуйте. Помогите пожалуйста с программой. Мне нужно найти местоположение слова в строке вводимой с консоли. #include...

Для исходной строки a, состоящей из буквенных символов
Для исходной строки a, состоящей из буквенных символов, определить упорядочены ли они по алфавиту. Вывести строку и результат анализа в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru