Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ cout не работает https://www.cyberforum.ru/ cpp-beginners/ thread231509.html
Здравствуйте. Такая программа: // Prog.cpp: определяет точку входа для консольного приложения. // #define WINVER 0x501 #include "stdafx.h" #include <afxwin.h> #include <iostream> int main(...
в 9-00(мск) начнется экзамен, нужна будет небольшая п0мощь C++
должна быть несложная задачка, думаю , что не решу, скину сюда)
Алгоритм игры в Точки C++
Народ, выручайте. Очень нужен алгоритм игры в Точки. Я нашел вот эту страницу, читал несколько раз, ничего не понял: http://pointsgame.narod.ru/ Было бы хорошо если кто выложил на С или С++?
C++ Написать комментарии к программе Написать комментарии к программе по возможности как можно подробней!!! //--------------------------------------------------------------------------- #include <vcl.h> #include<iostream.h>... https://www.cyberforum.ru/ cpp-beginners/ thread231484.html
C++ Отладка программы https://www.cyberforum.ru/ cpp-beginners/ thread231462.html
Общая постановка. Пользовательский класс Х должен содержать необходимые элементы - данные, которые создаются в динамической области памяти, конструктор для их создания (операция new) и установки их...
Блок схемы. C++
Ребята, помогите нарисовать блок схемы или хотя бы чуток объяснить что откуда и куда....т.е. пояснить алгоритм написания.СПАСИБО!!! №1 Дан текст произвольной длины, оканчивающийся точкой с...
Простой Симплекс метод C++
Мне позарез нужны исходники на прямой симплекс-метод-ПОМОГИТЕ!!!!!!! Я нашел программу на паскале (((а мне нужно на С \ С + +. Облазил кучу форумов и не нашел.PROGRAM SIMPLEX_METOD; USES CRT;...
C++ Чтение Djvu формата Здраствуйте, у меня такой вопрос, как открывать Djvu? https://www.cyberforum.ru/ cpp-beginners/ thread231442.html
C++ Удаление пар цифр из числа. https://www.cyberforum.ru/ cpp-beginners/ thread231425.html
Задача написать функцию, которая будет удалять из целого числа рядом стоящие цифры, если их сумма равна 5. Например из числа 23450333 останется 4333. Не использовать массивы. Я пока додумался как...
C++ двумерный массив.указатели. срочно Дана матрица целых чисел. Собрать все нулевые элементы выше главной диагонали (заполнение осуществлять параллельно главной диагонали). нужно переделать эту программу (сделать при помощи указателей).... https://www.cyberforum.ru/ cpp-beginners/ thread231424.html
Эксперт С++
3206 / 1733 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
20.01.2011, 11:31 0

Найти отрезок массива-палиндром, в котором первое число равно последнему, второе предпоследнему и т.д.

20.01.2011, 11:31. Просмотров 2042. Ответов 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//////////////////////////////////////////////////////////////////////////////////////
//Перевертыши. Дан числовой массив А[1...n]. Найти отрезок массива максимальной длины, 
//в котором первое число равно последнему, второе предпоследнему и т.д. 
//Определить длину и вывести элементы найденного отрезка на экран. на борланде
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <vector>
//////////////////////////////////////////////////////////////////////////////////////
typedef int                 T_num;
typedef std::vector<T_num>  T_nums;
typedef std::string         T_str;
//////////////////////////////////////////////////////////////////////////////////////
void  get_max_palindrom
    (
        int            i, 
        const T_nums&  nums, 
        int&           len, 
        int&           i_beg, 
        int&           i_end
    )
{
    int  len_max_cur  = -1;
    int  i_beg_cur    = -1; 
    int  i_end_cur    = -1;
 
    if(   i < int(nums.size() - 1 - 2)
       && nums[i] == nums[i + 2])
    {
        int k = 1;
        do
        {
            ++k;
        }while(   i + 1 - k >= 0
               && i + 1 + k < nums.size()
               && nums[i + 1 - k] == nums[i + 1 + k]);
        
        int  len_cur = 2 * --k + 1;
        if(   len_max_cur == -1
           || len_cur > len_max_cur)
        {
            len_max_cur = len_cur;
            i_beg_cur   = i + 1 - k;
            i_end_cur   = i + 1 + k + 1;
        }
    }
 
    if(
          i < int(nums.size() - 1 - 3)
       && nums[i]      == nums[i + 3]
       && nums[i + 1]  == nums[i + 2]
      )
    {
        int k = 1;
        do
        {
            ++k;
        }while(   i + 1 - k >= 0
               && i + 2 + k < nums.size()
               && nums[i + 1 - k] == nums[i + 2 + k]);
        
        int  len_cur = 2 * (--k + 1);
        if(   len_max_cur == -1
           || len_cur > len_max_cur)
        {
            len_max_cur = len_cur;            
            i_beg_cur   = i + 1 - k;
            i_end_cur   = i + 2 + k + 1;
        }
    }
    len    = len_max_cur;
    i_beg  = i_beg_cur;
    i_end  = i_end_cur;
}
//////////////////////////////////////////////////////////////////////////////////////
void  print_max_palindrom(const T_nums&  nums)
{
    int  len_max    = -1;
    int  i_max_beg  = -1;
    int  i_max_end  = -1;
 
    for(size_t  i = 0; i < nums.size(); ++i)
    {
        int  len    = -1;
        int  i_beg  = -1;
        int  i_end  = -1;
        get_max_palindrom(i, nums, len, i_beg, i_end);
        if(len > len_max)
        {
            i_max_beg = i_beg;
            i_max_end = i_end;
        }
    }
 
    if(   i_max_beg != -1
       && i_max_end != -1)
    {
        std::cout << "Максимальный палиндром в этом массиве:"
                  << std::endl;
        std::copy(nums.begin() + i_max_beg, nums.begin() + i_max_end, 
                  std::ostream_iterator<T_num>(std::cout, "\t"));
        std::cout << std::endl;
    }
    else
    {
        std::cout << "В заданном массиве нет палиндромов."
                  << std::endl;
    }
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));   
    srand(static_cast<unsigned>(time(0)));  
    const int VECT_SIZE = 30;
    struct  T_gen_with_mod
    {
        const T_num MOD_;
        //-----------------------------------------------------------------------------
        T_gen_with_mod(T_num mod) : MOD_(mod)
        {}
        //-----------------------------------------------------------------------------
        T_num  operator() ()
        {
            return  rand() % MOD_;
        }
    };
 
    T_nums  nums;
    std::generate_n(std::back_inserter(nums), VECT_SIZE, T_gen_with_mod(VECT_SIZE));
 
    std::copy(nums.begin(), nums.end(), 
              std::ostream_iterator<T_nums::value_type>(std::cout, "\t"));
 
 
    print_max_palindrom(nums);    
}


Вернуться к обсуждению:
Найти отрезок массива-палиндром, в котором первое число равно последнему, второе предпоследнему и т.д.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2011, 11:31
Готовые ответы и решения:

Найдите отрезок массива, в котором первое число равно последнему, второе - предпоследнему и так далее
Задание: Задан числовой массив A(M). Найдите отрезок массива, в котором первое число равно...

В массиве найти отрезок максимальной длины, в котором первое число равно последнему, второе - предпоследнему и т.д. Напечатать характеристики этого от
Помогите ребят!!!!препод задачи задачи для аттестации,сделал фактически все,кроме этой: &quot;В массиве...

Найти отрезок массива максимальной длины, в котором первое число равно последнему, второе предпоследнему и т.д.
Задан числовой массив A. Найти отрезок массива максимальной длины, в котором первое число равно...

Найдите отрезок максимальной длины, в котором первое число равно последнему, второе — предпоследнему
Задан числовой массив длины N . Найдите отрезок максимальной длины, в котором первое число равно...

6
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.