最长递增子序列

input:

15

1 9 2 5 7 3 4 6 8 0 11 15 17 17 10

output:

3 4 6 8

错误代码

#include <stdio.h>
int main()
{
    int i;
    int n;
    scanf("%d",&n);
    int a[100];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    int j;
    int count;
    int max=0;
    int ini;
    for(i=0;i<n;i++)
    {
        for(j=i;j<n-1;j++)
        {
            count=1;                   //
            if(a[j]<a[j+1])
            {
                count++;
               
            }
           // if(count>max){ini=i;max=count;}
            else
            {
                break;
            }
        }
		if(count>max){ini=i;max=count;}
    }
    printf("%d",a[ini]);
    for(i=ini+1;i<ini+max;i++)
    {
        printf(" %d",a[i]);
    }
}

正确代码

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int a[100];
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    int max_len = 1;  // 最长连续递增序列长度
    int start_idx = 0; // 最长序列的起始索引
    int current_len;

    // 遍历每个可能的起始点
    for (int i = 0; i < n; i++) {
        current_len = 1; // 当前序列长度至少为1
        // 向后延伸检查连续递增
        for (int j = i + 1; j < n; j++) {
            if (a[j] > a[j - 1]) {
                current_len++;
            } else {
                break; // 不再递增,停止延伸
            }
        }
        // 更新最长序列信息
        if (current_len > max_len) {
            max_len = current_len;
            start_idx = i;
        }
    }

    // 输出结果
    printf("%d", a[start_idx]);
    for (int i = start_idx + 1; i < start_idx + max_len; i++) {
        printf(" %d", a[i]);
    }
    printf("\n"); // 添加换行符

    return 0;
}

改正的代码

#include <stdio.h>
int main()
{
    int i;
    int n;
    scanf("%d",&n);
    int a[100];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    int j;
    int count;
    int max=1;
    int ini=0;
    for(i=0;i<n;i++)
    {
        count=1;            //
		for(j=i;j<n-1;j++)
        {
            
            if(a[j]<a[j+1])
            {
                count++;
            }
           // if(count>max){ini=i;max=count;}
            else
            {
                break;
            }
        }
		if(count>max){max=count;ini=i;}
    }
    printf("%d",a[ini]);
    for(i=ini+1;i<ini+max;i++)
    {
        printf(" %d",a[i]);
    }
    return 0;                      //
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务