Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2011, 19:50   #1
Елена Погодина
 
Регистрация: 15.06.2011
Сообщений: 6
По умолчанию В целочисленном массиве найти наиболее длинную цепочку одинаковых подряд стоящих элементов C++

В целочисленном массиве найти наиболее длинную цепочку одинаковых подряд стоящих элементов (вывести на экран длину такой цепочки и элемент ее составляющий)
Помогите пожалуйста сделать а то к преподу подошла она как оказалось сама незнает как делать,а результат требует!!!
Елена Погодина вне форума Ответить с цитированием
Старый 15.06.2011, 22:38   #2
Алексей Емеля
Пользователь
 
Аватар для Алексей Емеля
 
Регистрация: 13.06.2011
Сообщений: 23
По умолчанию

Вот мой вариант программы с комментариями. Если в массиве встречается несколько одинаковых максимальных последовательностей одинаковых чисел, то на экран выводится результат, соответствующий той, которая идет первее остальных. Программа в стиле С++.

Код:
// Массив array - для поиска цепочки
// Массив k - для хранения длин разных цепочек
// Массив a - для хранения значений, соответствующих каждой последовательности
// max - для хранения длины самой длинной цепочки

#include<iostream>
using namespace std;

int main()
{
	int n;
	cout << "количество элементов -> ";
	cin >> n;
	int array[n], k[n], a[n], max;
	int i, j, p = 0; // Счетчики
	
	// Ввод элементов массива и обнуление массивов
	for( i = 0; i < n; i++ )
        {
		cout << i+1 << " = ";
		cin >> array[i];
		k[i] = 0;
		a 
		[i] = 0;
	}
	
	// Поиск одинаковых последовательностей
	for( i = 0; i < n; i++ )
	{
		for( j = i; j < n; j++ )
		{
			if( array[i] == array[j] ) 
                        {
				k[p]++; 
				a[p] = array[i];
			}
			else break;
		}
		p++;
	}
	
	// Поиск максимальной последовательности
	max = k[0];
	for( i = 0; i < p; i++ ) 
		if( max < k[i] ) max = k[i];
		
	// Поиск числа, из которого состоит максимальная последовательность
	for( i = 0; i < p; i++ )
		if( max == k[i] ) break;
	//Вывод из на экран
	cout << max << " - самая длинная цепочка из числа " << a[i] << "\n";
	return 0;
}
Дорога в тысячу миль начинается с одного шага.
Алексей Емеля вне форума Ответить с цитированием
Старый 15.06.2011, 23:44   #3
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Еще вариант:
Код:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>

using namespace std;


int main()
{
	vector<int> values;
	copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(values));

	unsigned max_count(0), next(0);
	int number(0);
	for(vector<int>::iterator iter = values.begin(); iter != values.end(); iter += next)
		if((next = find_if(iter, values.end(), bind2nd(not_equal_to<int>(), *iter)) - iter) > max_count)
		{
			max_count = next;
			number = *iter;
		}
	cout << number << " " << max_count << endl;
	
	return 0;
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 16.06.2011, 15:31   #4
Елена Погодина
 
Регистрация: 15.06.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
Еще вариант:
Код:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>

using namespace std;


int main()
{
	vector<int> values;
	copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(values));

	unsigned max_count(0), next(0);
	int number(0);
	for(vector<int>::iterator iter = values.begin(); iter != values.end(); iter += next)
		if((next = find_if(iter, values.end(), bind2nd(not_equal_to<int>(), *iter)) - iter) > max_count)
		{
			max_count = next;
			number = *iter;
		}
	cout << number << " " << max_count << endl;
	
	return 0;
}
Что-то не пашет
Елена Погодина вне форума Ответить с цитированием
Старый 16.06.2011, 15:37   #5
Алексей Емеля
Пользователь
 
Аватар для Алексей Емеля
 
Регистрация: 13.06.2011
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Елена Погодина Посмотреть сообщение
Что-то не пашет
В каком смысле не пашет? Ошибки выдает или программа не правильно работает?
Дорога в тысячу миль начинается с одного шага.
Алексей Емеля вне форума Ответить с цитированием
Старый 16.06.2011, 15:38   #6
Елена Погодина
 
Регистрация: 15.06.2011
Сообщений: 6
По умолчанию

Код:
#include <iostream>
using namespace std;
int main()
{
int size,n,i,j,max;
cout << "vvedite razmer massiva";
cin >> size;
int *a = new int [size];
int *k = new int [size];
max=0;
for (i=0;i<size;i++)
{
cout <<"vvedite "<<i<<" element";
cin>>a[i];
}
for (i=0;i<size;i++)
{
k[i]=0;
for (j=1+i;j<size;j++)
{
if (a[i]==a[j]) k[i]=k[i]+1;
}
}
cout<<endl;
for (i=0;i<size;i++)
{
if (k[i]>max) max=k[i];
}
max=max+1;
cout<<max;
return 0;
}
почемуто ничего не происходит не могу разобраться вроде всё правильно
Елена Погодина вне форума Ответить с цитированием
Старый 16.06.2011, 15:59   #7
Алексей Емеля
Пользователь
 
Аватар для Алексей Емеля
 
Регистрация: 13.06.2011
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Елена Погодина Посмотреть сообщение
почему то ничего не происходит не могу разобраться вроде всё правильно
Я запустил. Выводит длину самой длинной цепочки. Нормально все происходит.
Дорога в тысячу миль начинается с одного шага.
Алексей Емеля вне форума Ответить с цитированием
Старый 16.06.2011, 19:39   #8
Елена Погодина
 
Регистрация: 15.06.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Алексей Емеля Посмотреть сообщение
Я запустил. Выводит длину самой длинной цепочки. Нормально все происходит.
У меня не выводит вообще ничего после того как я все ввожу
Всё сделала
Код:
#include <iostream.h>
int main()
{
int size,n,i,j,max;
cout << "vvedite razmer massiva ";
cin >> size;
int *a = new int [size];
int *k = new int [size];
max=0;
for (i=0;i<size;i++)
{
cout <<"vvedite "<<i<<" element ";
cin>>a[i];
}
for (i=0;i<size;i++)
{
k[i]=0;
for (j=1+i;j<size;j++)
{
if (a[i]==a[j]) k[i]=k[i]+1;
}
}
cout<<endl;
for (i=0;i<size;i++)
{
if (k[i]>max) max=k[i];
}
max=max+1;
cout<<" Povtoraetsa "<<max<<" raza"<<endl;
system("pause");
return 0;
}
Помогите еще число вывести которое повторяется???

Последний раз редактировалось Елена Погодина; 16.06.2011 в 19:52.
Елена Погодина вне форума Ответить с цитированием
Старый 16.06.2011, 19:55   #9
Алексей Емеля
Пользователь
 
Аватар для Алексей Емеля
 
Регистрация: 13.06.2011
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Елена Погодина Посмотреть сообщение

Помогите еще число вывести которое повторяется???
Она позволит результат посмотреть. А на счет повторяющегося числа - у меня в исходнике который я написал выше выводит.

Это ваша программа все корректно выводящая. Запускал и компилировал в Linux Mint в среде Geany.
Изображения
Тип файла: jpg Без имени.jpg (23.5 Кб, 666 просмотров)
Дорога в тысячу миль начинается с одного шага.

Последний раз редактировалось Алексей Емеля; 16.06.2011 в 20:09.
Алексей Емеля вне форума Ответить с цитированием
Старый 16.06.2011, 21:18   #10
Елена Погодина
 
Регистрация: 15.06.2011
Сообщений: 6
По умолчанию

Не могу число вывести которое повторяется
Елена Погодина вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа, которая считывает цепочку чисел и печатает наиболее длинную, монотонно возрастающую их подпосл alexb81 Помощь студентам 3 31.05.2011 14:03
В массиве из n элементов подсчитать количество четырёд идущих подряд одинаковых элементов ( Delphi7 ) Анастасья Помощь студентам 1 31.03.2011 19:23
В одномерном масиве найти длинную цепочку стоящих попарно различных элементов Махряк Помощь студентам 0 05.12.2007 20:00
В одномерном масиве найти длинную цепочку стоящих попарно различных элементов Махряк Помощь студентам 0 29.11.2007 23:09
В целочисленном массиве найти самое часто повторяющееся число Алена Помощь студентам 2 01.11.2007 19:46