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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2010, 12:22   #1
GNick
Новичок
Джуниор
 
Регистрация: 11.01.2010
Сообщений: 2
Сообщение Работа с массивами(Си++)

Программа, как я понял, должна выдавать длину максимальной цепочки повторяющихся элементов в массиве и индекс первого.
Программа запускается, но проблема в том, что не правильно считает. Просмотрите пожалуйста код, может найдёте мою ошибку.

/*
#include <iostream>
using namespace std;
void F38(int &m, int &b, int c[]){
int n=9, i=0, k=0;;
for (i=k=m=0; i<n-1; i++){ //Выдает длину максимальной цепочки повторяющихся элементов в массиве и индекс первого
if (c[i]==c[i+1]) k++; //Сравнение соседних элементов, при совпадении увеличить k
else { //Соседние элементы не совпали
if (k > m) m=k, b=i-k-1; //m приравнивается к числу одинаковых элементов цепочки, b - к номеру первого элемента
k=0;
}
}
}

void main(){
int b=0, m=0, c[100]={3,1,1,2,2,3,3,3,3};
F38(m,b,c);
cout << "m=" << m << "\n";
cout << "b=" << b << "\n";
}
*/

Последний раз редактировалось GNick; 11.01.2010 в 17:40.
GNick вне форума Ответить с цитированием
Старый 11.01.2010, 23:18   #2
GNick
Новичок
Джуниор
 
Регистрация: 11.01.2010
Сообщений: 2
По умолчанию

это исходный код, мне надо было его проанализировать и оформить в виде функции:

for (i=k=m=0; i<n-1; i++){
if (c[i]==c[i+1]) k++;
else {
if (k > m) m=k, b=i-k-1;
k=0;
} }
Посмотрите, что я не так сделал.
GNick вне форума Ответить с цитированием
Старый 12.01.2010, 00:27   #3
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Код:
#include <iostream>

using namespace std;

int find(const int *a, const int n, int &maxLen, int &index)
{
	int curLen = 0, curIndex = 0;
	maxLen = 0;
	index = 0;
	for (int i = 0; i < n - 1; i++)
		if (a[i] == a[i + 1])
		{
			curLen = 1;
			curIndex = i;
			while ((a[i] == a[i + 1]) && (i < n - 1))
			{
				curLen++;
				i++;
			}
			if (curLen > maxLen)
			{
				maxLen = curLen;
				index = curIndex;
			}
		}
}

int main()
{
	int a[100];
	int n, maxLen, index;
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	find(a, n, maxLen, index);
	cout << "\nMax length = " << maxLen << "\nIndex: " << index << endl;
	system("pause");
	return 0;
}
только index выводится с учетом того, что нумерация элементов идёт с нуля. Если нужно с единицы, то выводите index + 1.
Если повторяющихся элементов нет, то maxLen = 0 и можно этот случай отдельно обработать...

Последний раз редактировалось Alex_FF; 12.01.2010 в 00:30.
Alex_FF вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами (С++) q3storm Помощь студентам 7 26.04.2011 09:46
C(Си)-Работа с массивами Zheka288 Общие вопросы C/C++ 3 24.12.2009 17:28
Работа с массивами Neba Общие вопросы Delphi 7 26.11.2008 21:21
Работа с массивами rexec Microsoft Office Excel 12 21.04.2008 13:29
Работа с массивами Hakman Общие вопросы C/C++ 1 19.02.2008 15:11