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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ cout не работает http://www.cyberforum.ru/cpp-beginners/thread231509.html
Здравствуйте. Такая программа: // Prog.cpp: определяет точку входа для консольного приложения. // #define WINVER 0x501 #include "stdafx.h" #include <afxwin.h> #include <iostream> int main( int argc, char* argv )
C++ в 9-00(мск) начнется экзамен, нужна будет небольшая п0мощь должна быть несложная задачка, думаю , что не решу, скину сюда) http://www.cyberforum.ru/cpp-beginners/thread231491.html
Алгоритм игры в Точки C++
Народ, выручайте. Очень нужен алгоритм игры в Точки. Я нашел вот эту страницу, читал несколько раз, ничего не понял: http://pointsgame.narod.ru/ Было бы хорошо если кто выложил на С или С++?
C++ Написать комментарии к программе
Написать комментарии к программе по возможности как можно подробней!!! //--------------------------------------------------------------------------- #include <vcl.h> #include<iostream.h> #include<conio.h> #pragma hdrstop //---------------------------------------------------------------------------
C++ Отладка программы http://www.cyberforum.ru/cpp-beginners/thread231462.html
Общая постановка. Пользовательский класс Х должен содержать необходимые элементы - данные, которые создаются в динамической области памяти, конструктор для их создания (операция new) и установки их начальных значений: Х(), деструктор: ~ Х (), friend – функция печати: friend void print(), функция, решающая поставленную задачу: friend Void Run(). Код методов и функций – вне пространства...
C++ Блок схемы. Ребята, помогите нарисовать блок схемы или хотя бы чуток объяснить что откуда и куда....т.е. пояснить алгоритм написания.СПАСИБО!!! №1 Дан текст произвольной длины, оканчивающийся точкой с запятой. Подсчитать количество цифр в тексте. #include <iostream.h> #include <string.h> int main(){ подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
20.01.2011, 11:31     Найти отрезок массива-палиндром, в котором первое число равно последнему, второе предпоследнему и т.д.
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);    
}
 
Текущее время: 11:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru