Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C] вывод последовательностей из массива


Автор: DeathKnight 6.10.2008, 16:35
существует массив чисел(слуайных), необходимо вывести самые длинные убывающую и возрастающую последовательности.

если можно, несколько разных алгоритмов

Автор: DeathKnight 7.10.2008, 17:23
вот, что у меня получилось...

Код

// mass.cpp : вывести самые длинныые убывающую и возрамтающие последовательности
//

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include <stdlib.h>
//#define kl 10

int _tmain(int argc, _TCHAR* argv[])
{int *m, i,t,lup,l,c,p,u, kl, r, s, v;            
i=t=lup=l=c=u=p=v=s=r=0;

m1:
printf("vvedite razmer massiva: \n");
scanf("%d", &kl);

if((m=(int*)malloc(kl*sizeof(int)))==NULL)
{puts("net pamyaty, vvedite menshiy massiv");
goto m1;}

//for(i=0; i<kl; i++)
//m[i]=rand();

for(i=0;i<kl;i++)
scanf("%d", &m[i]);

for(i=0; i<kl;i++)
printf("%d\t", m[i]);
puts("");




for(i=1;i<=kl-1;i++)
{
    if(m[i-1]<m[i])
    {
        lup++;
        if(l<lup)
        {
            t=i-lup;
            l=lup;
        }        
    }
    else lup=0;
}

for(i=1; i<=kl-1; i++)
{
    if(m[i-1]>m[i])
    {
        c++;
        if(u<c)
        {
            p=i-c;
            u=c;
        }
    }
    else c=0;
}

for(i=1;i<=kl-1;i++)
{if(m[i-1]==m[i])
    {
        r++;
        if(v<r)
        {
            s=i-r;
            v=r;
        }
    }
    else r=0;
}

printf("postoyannaya posl:  ");

for(i=s;i<=s+v; i++)
printf("%d ", m[i]);
s++;
v++;

printf("\nelementov: %d, pervii: %d\n", v,s);


printf("\nvozrastayuschaya posl: ");

for(i=t;i<=t+l; i++)
printf("%d ", m[i]);
t++;
l++;

printf("\nelementov: %d, pervii: %d\n", l,t);

printf("\nubivayuschaya posl: ");

for(i=p;i<=p+u; i++)
printf("%d ", m[i]);
p++;
u++;

printf("\nelementov: %d, pervii: %d\n", u,p);



return 0;
}



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)