Re: помогите чайнику
От: unforgiven_hero Ниоткуда www.lleo.aha.ru/na
Дата: 17.03.05 09:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Дана пооследовательность из 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]);
                }
            }
}
Monakhov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.