70,038
社区成员
发帖
与我相关
我的任务
分享这是题目

这是我的代码
#include<stdio.h>
int n;
int i;
int a[100010];
//一个用于临时存储
//一个用于储存最终结果
int cache[100010];
int result[100010];
//两个数组对应的长度
int c;
int r;
//计数器
int count;
int main(){
//初始化线性表
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
/*//测试是否输入
for(i=0;i<=n;i++){
printf("%d ",a[i]);
}*/
//初始化递增序列
//递增序列第一个设为0
//目的是为了如果第二个是递增序列的开始
//这样直接跟第一个比较就行
result[0]=0;
cache[0]=0;
c=0;
r=0;
count=0;
while(count<n){
//跟前一个数字比大小
if(a[count]>cache[c]){
c++;
cache[c]=a[count];
}else{
if(c>r){
for(i=1;i<=c;i++){
result[i]=cache[i];
}
r=c;
}
c=1;
cache[c]=a[count];
}
// printf("%d测试\n",m);
count++;
}
//输出
if(r!=0){
//有多个子序列
for(i=1;i<r;i++){
printf("%d ",result[i]);
}
printf("%d",result[r]);
}else{
//只有一个子序列
for(i=1;i<c;i++){
printf("%d ",cache[i]);
}
printf("%d",cache[c]);
}
return 0;
}
这是测试结果

求助大佬,谢谢谢谢
随机最大n ,是不是没有对输入的 n 进行限定检验啊,预定义的是 100010,输入比这更大的呢?