Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Kou55
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 30
1

начало и конец подпоследовательности

26.01.2017, 13:37. Просмотров 769. Ответов 3
Метки нет (Все метки)

Дано натуральные число n и целые числа а1, а2 ... аn. Для последовательности а1, а2 ... аn рассмотреть подпоследовательности членов, что идут подряд и состоят из:
1)полных квадратов;
2)степеней числа 5;
3)простых чисел;
В каждом варианте получить наибольшую из длин рассмотренных отрезков.
Определить функции, которые позволят распознавать полные квадраты, степени числа 5 и простые числа.

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
#include <iostream>
using namespace std;
 
bool kvadr(int n)
{
    if ((int)sqrt(n)*(int)sqrt(n) == n)
        return 1;
    return 0;
}
bool step5(int n)
{       
    while (n >= 5)
    {
        if (n % 5 != 0) return 0;
        n = n / 5;
        if (n == 1) return 1;
    }   
    return 0;
}
bool is_simple(int n)
{
    if 
        (n == 1)
        return 0;
    else
    
        for (int i = 2; i <= sqrt(n); i++)
 
            if (n%i == 0) return 0;
        return 1;
    
}
 
int max_length(int n, int mass[])
{
    return 0;
}
 
int main()
{
    setlocale(0, "");
    int n;
    cout << "Количество чисел: ";
    cin >> n;
    int a[100];
    cout << "Последовательность: "<< endl;
    for (int i = 0; i < n; i++)
        cin >> a[i];
 
    int max_length = 0, length = 0;
 
        for (int i = 0; i < n; i++)
    {
        if (kvadr(a[i]) == 1)length++;
        else
        {
            if (length > max_length)max_length = length;
            length = 0;
        }
    }
 
    if (length > max_length)max_length = length;
    cout << "Макс длина последовательности полных квадратов: " << max_length << '\n';
        
    for (int i = 0; i < n; i++)
    {
        if (step5(a[i]) == 1)length++;
        else
        {
            if (length > max_length)max_length = length;
            length = 0;
        }
    }
    if (length > max_length)max_length = length;
    cout << "Макс длина последовательности степеней числа 5: " << max_length << '\n';
        
    for (int i = 0; i < n; i++)
    {
        if (is_simple(a[i]) == 1)length++;
 
        else
        {
            if (length > max_length)max_length = length;
            length = 0;
        }
    }
 
    if (length > max_length)max_length = length;
    cout << "Макс длина последовательности простых чисел: " << max_length << '\n';
 
    system("pause");
    return 0;
}
К существующему коду еще нужно найти начало и конец трех подпоследовательностей (вывести индекс( или сам элемент) первого и последнего)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2017, 13:37
Ответы с готовыми решениями:

Змейка. Начало и конец.
Решил написать Змейку с нуля. Не хотелось бы никуда подглядывать и копировать чужие идеи - хочется...

Поменять начало и конец
дан массив из m+n элементов. начало массива это a..a, конец массива это a..a. написать функцию,...

Введите начало и конец отрезка
Здравствуйте! Возникла проблема! В int program мне нужно проверить начало и конец отрезка на то,...

Добавление числа в начало и конец
Дано число n Добавить по единице вначале и в конце записи числа n. как добавить единицу в конце...

начало и конец цикла в коде.
Вот программа по определению магического квадрата из матрицы, заданной в txt файле. #include...

3
Байт
Эксперт C
20274 / 12841 / 2686
Регистрация: 24.12.2010
Сообщений: 26,811
26.01.2017, 13:56 2
Лучший ответ Сообщение было отмечено Kou55 как решение

Решение

Цитата Сообщение от Kou55 Посмотреть сообщение
нужно найти начало и конец трех подпоследовательностей
На примере первого (квадратов)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int max_length = 0, length = 0, ib =0, ik=0, ibM=-1, ikM=-1;
    for (int i = 0; i < n; i++)
    {
        if (kvadr(a[i]) == 1) {
           if (length==0) ib = i; 
           length++; 
           ik=i; 
        }
        else   {
            if (length > max_length) {
              max_length = length; 
              ibM=ib; ikM = ik
            }
            length = 0;
        }
    }
Как-то так.
ЗЫ. length - не самый удачный идентификатор. Есть функция с таким именем. Возможны коллизии.
1
MrGluck
Модератор
Эксперт CЭксперт С++
8112 / 4964 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
26.01.2017, 14:08 3
Цитата Сообщение от Байт Посмотреть сообщение
Есть функция с таким именем
Есть только такой метод у basic_string (string). Он здесь не используется, да и коллизий между именем функции и названием переменной не может быть.
0
Байт
Эксперт C
20274 / 12841 / 2686
Регистрация: 24.12.2010
Сообщений: 26,811
26.01.2017, 14:26 4
Цитата Сообщение от MrGluck Посмотреть сообщение
Есть только такой метод
Да, вы совершенно правы. Просто я в последнее время много занимаюсь PHP и JS, а там эти length, size на каждом шагу. Просто я хотел предостеречь ТС от использования простых английских слов для идентификации своих объектов. Конечно, есть всякие механизмы типа namespace. Но в общем-то я рекомендую соблюдать некоторую осторожность. И во всяком случае, быть готовым к такого рода коллизиям. Впрочем, это полностью дело самого ТС.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2017, 14:26

Вставить символы в начало и конец строки
Дана строка символов. Сформируйте новую строку, начинающуюся с символа а (вводится с клавиатуры) и...

Четные в начало массива, нечетные - в конец
четные в начало массива выводит, а вот нечетные не хочет.. пишет вместо них какие-то тысячные...

Перенос букв в начало строки, а цифр в конец C++
Подскажите пожалуйста как осуществить данное преобразование на языке C++ Дана строка с цифрами и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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