回复 6楼 encounter
你的源代码好像不能通过VC++6.0编译,变量的定义应该函数中最先进行。代码不错,修改了一下,通过编译了。。。#include<stdio.h>
//全局变量
int a[]={7,300,275,215,245,198,150,235};
int b[20];//存放以a[i](0<=i<=a.length-1)为最后元素的最大递增子串的长度。
int num=10;//num为a数组的长度
int k;//存放最大递增子串最后一个元素的下标
//求出b[i]中最大的值,并将其下标存在k中
int Max()
{
int i=0;
int temp=0;
for(i=0;i<num;i++)
{
if(b[i]>temp)
{
temp=b[i];
k=i;
}
}
return temp;
}
// 以a[i](0<=i<=a.length-1)为最后元素的最大递增子串的长度存到b[i]中
int Lis()
{
int k;
int i,j;
b[0]=1;//以a[0]为最后元素的子串只有a[0],所以长度为1.
for (i=1;i<num;i++)
{
k=0;
for(j=0;j<i;j++)
{
if(a[j]<=a[i]&&k<b[j])
{
//比较所有小于a[i]并位于a[i]前面的最大子串的长度。比如3 6 4 5,那么以5结尾的最大子串长度
//等于:max{(小于5的元素有3,4)3的最大子串长度,4的最大子串长度}+1;
k=b[j];
}
}
b[i]=k+1;//max{(小于5的元素有3,4)3的最大子串长度,4的最大子串长度}+1;
}
return Max();
}
void main()
{
printf("最大递增子串的长度为:%d\n",Lis());
printf("非递增个数:%d\n",8-Lis());
}