Здравствуйте, Аноним, Вы писали:
А>Дана пооследовательность из 100 чисел, как определить связаны ли элементы этой последовательности геометрической програссией, а главное как вывести самую длинную прогрессию ?
to ssm: 4, 10, 25, ... — Сечешь?
to Author:
Пару уточнений:
1. В задаче не сказано, может ли быть так, что числа последовательности будут дробными; 8)
2. Но тем более, необходимо ли учитывать факт целочисленности знаменателя!
вообщем, вот...
typedef unsigned int uint;
const uint N = 11;
void main()
{
float Seq[N] = {1, 2, 4, 8, 16, 32, 64, 256, 1024, 4096, 16384};
//float Seq[N] = {1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1}; // тута глючит, ну и х.. :D
float MaxB, MaxQ, MaxN = 0, k; // пояснять названия переменных не имеет значения 8)
for(uint b = 0; b < N; b++)
for(uint q = 0; q < N; q++)
if(q != b && (Seq[q]/Seq[b] > 1.0f || Seq[q]/Seq[b] < -1.0f))
{
k = Seq[b];
for(uint n = 2; true; n++)
{
k *= Seq[q]/Seq[b];
for(uint i = 0; i < N; i++)
if(q != i && Seq[i]/k == Seq[q]/Seq[b])
break;
if(i == N)
break;
}
if(n >= MaxN)
{
MaxN = n;
MaxQ = Seq[q]/(MaxB = Seq[b]);
}
}
}