Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите,пожалуйста,как решить эту задачу на С++ / 3 сообщений из 3, страница 1 из 1
22.04.2005, 18:22
    #33031076
Koldun#
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите,пожалуйста,как решить эту задачу на С++
Условие:
Найти максимум длины таких начальных отрезков заданного слова,которые имеют вид VV,где V-симметричное слово.
подскажите,что да как,а может,кто поможет текст проги написать?
...
Рейтинг: 0 / 0
22.04.2005, 18:35
    #33031108
baleGos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите,пожалуйста,как решить эту задачу на С++
Вот пример поиска семетрий через массив указателей
Код: plaintext
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.
char **F(char *p,int *&qq)
     {
     char *q;
     int ns= 0 ;
     for(q=p; *q!= 0 ; q++)          
	 {
         for (int k= 1 ; q-k>=p && q[-k]==q[k]; k++); //поиск симметричных фрагментов
         if (k>= 3 ) ns++;                  //подсчёт симметричных фрагментов
	                                  //для определения размерности ДМУ
         } 
     char **s=new char *[ns+ 1 ];       //создание ДМУ
     qq=new int[ns];                
     s[ns]=NULL;                     //ограничитель ДМУ
     int m= 0 ;   
     for (q=p; *q!= 0 ; q++) 
	 {
         for (int k= 1 ; q-k>=p && q[-k]==q[k]; k++);  
         if (k>= 3 )
		s[m]=q-k+ 1 ,                            
		qq[m++]= 2 *k- 1 ;      
	 
        }
     return s;     //возвратить указатель на ДМУ
    }

void main()         //вызов функции
    {
    char **qq;  
    int *ss;
    char *q="This is fragment */abcdedcba*/ and */bsfgfsb*/ and */xtpuptx*/";
    qq=F(q,ss);
    for (int i= 0 ; qq[i]!=NULL; i++) 
	{
	 //printf("%d:%s\n",ss[i],qq[i]);
	for (int j= 0 ;j<ss[i];j++) putchar(qq[i][j]);
	puts("");
	}
    delete qq;
    delete ss;
   }

А это просто одинаковые, то ж через массив указателей(мож надо)
Код: plaintext
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.
char **F(char *p)
	{
	char *q;
	int ns= 0 ;
	int k;
	for (q=p; *q!= 0 ;q++)           
	     {
	     for(k= 0 ;q[ 0 ]==q[k]; k++);
	     if (k>= 3 ) ns++,q+=k- 1 ;
	     } 
	char **s=new char *[ns+ 1 ];       //создание ДМУ
        s[ns]=NULL;                     //ограничитель ДМУ
	int m= 0 ;   
	for (q=p; *q!= 0 ;q++)           
	    {
	    for(k= 0 ;q[ 0 ]==q[k]; k++);
	    if (k>= 3 ) s[m++]=q,q+=k- 1 ;
	    } 
	return s;     
	}
void main()         
	{
	char *q="is aaaaaaaddddddaaaaa ssssseeeezsssssqnd";
	char **qq=F(q);
	for (int i= 0 ; qq[i]!=NULL; i++) 
		{
		for(int j= 0 ;qq[i][ 0 ]==qq[i][j];j++) putchar(qq[i][j]);
		printf("\n");
		}
	delete qq;
	}
...
Рейтинг: 0 / 0
22.04.2005, 18:51
    #33031150
KOldun#
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите,пожалуйста,как решить эту задачу на С++
baleGos спасибо,щас надо только со всем разобраться,если что подскажешь?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите,пожалуйста,как решить эту задачу на С++ / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]