Выделить знакочередующуюся подпоследовательность наибольшей длины и упорядочить ее по возрастанию - C (СИ)
Формулировка задачи:
Дана последовательность a1,...,an (n<=100) действительных чисел. Выделить из нее знакочередующуюся подпоследовательность наибольшей длины и упорядочить ее по возрастанию.
Решение задачи: «Выделить знакочередующуюся подпоследовательность наибольшей длины и упорядочить ее по возрастанию»
textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int main()
{
int i, j, n, pr, max=INT_MIN;
int LONG=1, T1, T2, pass=0, hold=0;
float a[100], b[100];
printf("N=");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("A[%d]=", i);
scanf("%f", &a[i]);
}
for(i=0;i<n;i++)
{
pr=a[i]*a[i+1];
if(pr<0){
LONG++;}
else
if(LONG>max)
{
T1=i-LONG;
T2=i;
max=LONG;
LONG=0;
}
}
for(i=0,j=T1;i<max,j<=T2;i++,j++)
{
b[i]=a[j];
printf("b[%d]=%.2f\n",i, b[i]);
}
for(pass=1;pass<=n-1; pass++)
for(i=0;i<=n-2;i++)
if(b[i]>b[i+1]) {
hold=b[i];
b[i]=b[i+1];
b[i+1]=hold;
}
printf("\n");
for(i=0;i<=max;i++)
printf("b[%d]=%.2f\n",i, b[i]);
return 0;
}