Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Найти в массиве самую длинную убывающую последовательность... / 6 сообщений из 6, страница 1 из 1
19.10.2015, 20:22
    #39080617
fr0st1k123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти в массиве самую длинную убывающую последовательность...
Найти в массиве самую длинную убывающую последовательность , расположенную после максимального элемента
включительно.Вывести на экран номера ее первого и последнего элементов.
Код: 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.
int main()
{
    int a[5] = { 0,2,10,3,1 };
    int first = 0, last = 0;
    int max(a[0]);
 
    for (int i = 0; i < 5; i++)
        if (a[i] > max)
            max = a[i];
    for (int i=max; i < 5; i++)
        if (a[i] > a[i + 1])
        {
            i++;
            first = a[i + 1];
        }
        else
            last = a[i];
        
 
 
 
        cout << first << last;
        return 0;
    }


выводит 0-0 , где ошибка ?
...
Рейтинг: 0 / 0
19.10.2015, 20:36
    #39080626
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти в массиве самую длинную убывающую последовательность...
В первом цикле ты нашел максимальный элемент...
А тебе нужно было найти позицию максимального элемента а не его значение.
...
Рейтинг: 0 / 0
19.10.2015, 20:40
    #39080630
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти в массиве самую длинную убывающую последовательность...
fr0st1k123где ошибка ?
max присваиваешь значение, а потом внезапно используешь его как индекс.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.10.2015, 03:43
    #39080763
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти в массиве самую длинную убывающую последовательность...
Вы думаете об одном, но на самом деле вам вполне вероятно нужно другое. Ниже решение того, о чём вы думаете. Поправьте ошибки если они там есть(это вполне возможно), и разберите разницу между серией и последовательностью в контексте программирования
Код: 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.
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.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

class sequence
{
	int* buf;
	int* max;//the first maximum pointer
	size_t len;
public:
	sequence* longest_decreasing_run_after_max;//самая длинная возрастающая серия после максимального элемента
	sequence* longest_decreasing_sequence_after_max;//самая длинная возрастающая последовательность после макисмального элемента
	sequence();
	sequence(int* b, size_t l);
	void set_max();
	int* get_max();//dummy
	size_t get_len();//dummy
	void set_longest_decreasing_run_after_max();
	void print();
	void print_first_and_last();
};

sequence::sequence()
{
	buf = NULL;
	longest_decreasing_run_after_max = longest_decreasing_sequence_after_max = NULL;
	len = 0;
}

sequence::sequence(int* b, size_t l)
{
	if (l <= 0){
		return;
	}
	buf = (int*)malloc(sizeof(int)*len);
	for (int i = 0; i < l; ++i){
		buf[i] = b[i];
	}
	len = l;
	set_max();
	printf("%i\n", *max);
	set_longest_decreasing_run_after_max();
}

void sequence::set_max()
{
	max = buf;
	for (int i = 1; i < len; ++i){
		if(*(buf + i)>*max)  
			max = buf + i;
	}
}

void sequence::set_longest_decreasing_run_after_max()
{
#define main_el (longest_decreasing_run_after_max)
	main_el = (sequence*)malloc(sizeof(sequence)* 1);
	main_el->buf = max;
	main_el->len = 1;
	int* temp = max;
	size_t len_cur = 1;

	for (int* i = max + 1; i != buf + len; ++i){ //разберитесь корректно ли сравнение i != buf + len
		if (*i < *(i - 1)){
			len_cur++;
		}
		else{
			if (len_cur>main_el->len){
				main_el->buf = temp;
				main_el->len = len_cur;
			}
			temp = i;
			len_cur = 1;
		}
	}
	if (len_cur>main_el->len){ //постарайтесь избавиться от дублирования кода
		main_el->buf = temp;
		main_el->len = len_cur;
	}
	//и проверьте алгоритм
}

void sequence::print()
{
	printf("pinting sequence.\n");
	for (int i = 0; i < len; ++i){
		printf("%i ", buf[i]);
	}
	printf("\n");
}

void sequence::print_first_and_last()
{
	printf("printing first and last elements.\n");
	printf("firts value: %i\nlast value: %i\n", *buf, *(buf + len - 1));
}



int main()
{
	int a[] = { 1, 2, 10, 100, 1, 2, 3, 1, 5, 1, 6, 1, 2, 5, 7, 6, 5, 4, 3, 2, 1, 2, 5, 12, 8, 2, 5 };
	sequence s(a,sizeof(a)/sizeof(a[0]));
	s.print();
	s.longest_decreasing_run_after_max->print_first_and_last();
	return 0;
}



Код для longest_decreasing_sequence_after_max не представлен, так как это запрещено правилами Сообщества
...
Рейтинг: 0 / 0
20.10.2015, 11:24
    #39081018
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти в массиве самую длинную убывающую последовательность...
Найти в массиве самую длинную убывающую последовательность ,
расположенную после максимального элемента включительно.
Странное условие. Напрашивается либо убрать "самую длинную"
либо после "максимального элемента".
...
Рейтинг: 0 / 0
20.10.2015, 13:20
    #39081178
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти в массиве самую длинную убывающую последовательность...
maytonНайти в массиве самую длинную убывающую последовательность ,
расположенную после максимального элемента включительно.
Странное условие. Напрашивается либо убрать "самую длинную"
либо после "максимального элемента".

Тут понятно. Вопрос в том, что он не понимает разницу между непрерывной последовательностью(серией) и последовательностью вообще.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Найти в массиве самую длинную убывающую последовательность... / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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