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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 19:20   #1
Guzal
Форумчанин
 
Аватар для Guzal
 
Регистрация: 11.09.2010
Сообщений: 101
По умолчанию прогрессии С++

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

4
364 843 1322 1801
ответ :2280, т. к. число увеличивается на 479
5
13 117 1053 9477 85293
ответ:767637, число увеличивается в 9 раз

подскажите, пожалуйста, алгоритм решения.
I'm a rebel. [I think positively].
Guzal вне форума Ответить с цитированием
Старый 16.11.2010, 19:56   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Возможно как-то так
Код:
int main()
{
	int a[4]={364, 843 ,1322, 1801};
	if(a[1]-a[0]==a[2]-a[1] && a[2]-a[1]==a[3]-a[2])
		printf("%d\n",a[3]+a[1]-a[0]);
	else if(a[1]/a[0]==a[2]/a[1] && a[2]/a[1]==a[3]/a[2])
		printf("%d\n",a[3]*a[1]/a[0]);
	else
		puts("It's not progression");
}
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 16.11.2010, 20:26   #3
Guzal
Форумчанин
 
Аватар для Guzal
 
Регистрация: 11.09.2010
Сообщений: 101
По умолчанию

тогда если для вводимых чисел можно написать как

Код:
int nextElement (int *n, int *a) {
	for (int i=0; i<*n; i++) {
	
	if (a[i+1] - a[i] == a[i+2] - a[i+1] && a[i+2] - a[i+1] == a[i+(*n-1)] - a[i+1])
	return a[i+(*n-1)] + a[i+1] - a[i];
	
	}
	
	}
число выходит слишком большое (
I'm a rebel. [I think positively].
Guzal вне форума Ответить с цитированием
Старый 16.11.2010, 21:06   #4
Guzal
Форумчанин
 
Аватар для Guzal
 
Регистрация: 11.09.2010
Сообщений: 101
По умолчанию

вот, написала так, но этот код проверяет не до конца массива, как сделать чтобы равенство проверялось по всему массиву?
Код:
#include <iostream>
using namespace std;
	
	int nextElement (int *n, int *a) {
	for (int i=0; i<*n; i++) {
	
	if (a[i+1] - a[i] == a[i+2] - a[i+1]) 
	return a[i+(*n-1)] + a[i+1] - a[i];
	
	}
		for (int i=0; i<*n; i++) {
	 	if (a[i+1] / a[i] == a[i+2] / a[i+1])
	  	return a[i+(*n-1)] * a[i+1] /a[i]; 
	 } 
	 
	}
	
	int main() {
	int n;
	cin>>n;
	int a[n];
	for (int i=0; i<n; i++)
	cin>>a[i];
	
	cout << nextElement (&n, a);
	return 0;

	}
I'm a rebel. [I think positively].
Guzal вне форума Ответить с цитированием
Старый 16.11.2010, 21:17   #5
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Код:
#include <iostream>
using namespace std;
	
	int nextElement (int n, int *a) {
		int cA=0,cG=0;
	for (int i=2; i<n; i++) {
		if (a[i] - a[i-1] != a[i-1] - a[i-2])
			cA=1;
	}
	if(cA==0)
		return a[n-1] + a[1] - a[0];
	
	for (int i=2; i<n; i++) {
 		if (a[i] / a[i-1] != a[i-1] / a[i-2])
			cG=1;
	}
	if(cG==0)
		return a[n-1]*(a[1] /a[0]); 
	return 0;
}
	int main() {
	int n;
	cout<<"Enter array size:  ";
	cin>>n;
	int *a=new int [n];
	cout<<"Fill array:\n";
	for (int i=0; i<n; i++)
	cin>>a[i];
	
	cout <<"Next:  "<< nextElement (n, a)<<endl;
	delete a;
	return 0;

	}
Ёж птица гордая, пока не пнешь не полетит.

Последний раз редактировалось Ezhuk; 16.11.2010 в 21:58.
Ezhuk вне форума Ответить с цитированием
Старый 16.11.2010, 21:24   #6
Guzal
Форумчанин
 
Аватар для Guzal
 
Регистрация: 11.09.2010
Сообщений: 101
По умолчанию

здесь получается также, если ввести например 1 2 4 5 9 то результат будет 18, хотя это не является прогрессией.Нужно чтобы равенство проверялось до конца, до n
I'm a rebel. [I think positively].
Guzal вне форума Ответить с цитированием
Старый 16.11.2010, 21:38   #7
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Изменил.
Теперь если нет последовательности выводит 0.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 16.11.2010, 21:54   #8
Guzal
Форумчанин
 
Аватар для Guzal
 
Регистрация: 11.09.2010
Сообщений: 101
По умолчанию

если return NULL, то выводит ошибку( - converting non-pointer type int from NULL
а если заменить на 0? так можно? во всех случаях тогда выведет ноль
I'm a rebel. [I think positively].
Guzal вне форума Ответить с цитированием
Старый 16.11.2010, 21:58   #9
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Ну а сейчас попробуйте.
А NULL можно заменить.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 16.11.2010, 22:02   #10
Guzal
Форумчанин
 
Аватар для Guzal
 
Регистрация: 11.09.2010
Сообщений: 101
По умолчанию

спасибо большооее) работает
I'm a rebel. [I think positively].
Guzal вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прогрессии и последовательности mego4el Общие вопросы C/C++ 2 30.09.2010 22:48
Заполнить массив первыми 10 членами арифметической прогрессии с известным первым членом прогрессии А и ра basav1k Фриланс 8 27.05.2010 00:33
Арифм. геометр. прогрессии RomT24 Помощь студентам 1 24.04.2010 19:37
Сумма членов арифмитической прогрессии (Delphi) Юрий2009 Помощь студентам 4 14.03.2009 00:05