一、编程找出一个字符串中最长的数字字符串,打印该数字串及长度
#include<stdio.h>
#include<string.h>
int main()
{
int i,stlen;
int numlen=0,numax=0;
int k;
char st[30]; //假定输入的字符串长度不超过30
scanf("%s",st);
stlen=strlen(st); //长度值
for(i=0;i<stlen;i++)
{
if(st[i]>='0'&&st[i]<='9') //判断数字
{numlen++;
if(numlen>numax)
{numax=numlen;k=i;} //k值记录最后一个数字的地址
}
else //如果出现不是数字,则numlen赋值0,循环继续
numlen=0;
}
k-=numax; //k倒退到第一个非数字的位置
k++; //k指向第一个数字
printf("该数字串长度是:");
printf("%d\n",numax);
printf("连续的最长数字串是:");
for(i=0;i<numax;i++)
printf("%c",st[k++]); //字符串打印
return 0;
}
运行结果:
二、找出一个数字序列中的最长递增子序列
#include<stdio.h>
int main()
{
int i,j;
int N,maxlen=0;
int len[100]; //len[i]表示以i这个位置结束的最长递增序列的长度
int st[100];
scanf("%d",&N);序列长度设置为N
for(i=0;i<N;i++)
scanf("%d",&st[i]);
for(i=0;i<N;i++)
len[i]=1;//标记数组
for(i=1;i<N;i++)
{
for(j=0;j<i;j++)
{
if(st[j]<st[i]&&len[i]<len[j]+1) //如果前面元素小于后面元素并且长度+1后比之前的最大值大
len[i]++; //数组值更新
}
}
for(i=0;i<N;i++) //寻找Len[]中的最大值
{
if(len[i]>maxlen)
maxlen=len[i];
}
printf("%d",maxlen);
return 0;
}
运行结果:
显然最长上升子序列为:2 4 6 8