鱼C论坛

 找回密码
 立即注册
查看: 1341|回复: 2

[已解决]我的代码运行不了

[复制链接]
发表于 2023-11-1 09:27:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题
给定序列,请求出其最长连续上升子序列的长度。

注意:是连续上升子序列,不是最长上升子序列。

输入格式:
第一行为一个整数n(0<n<=1000),代表序列总长度。第二行为用空格分隔n个整数。测试用例保证所有整数可以用int类型存储。

输出格式:
只有一个整数,为给定序列最长连续上升子序列的长度。

输入样例:
15
1 1 2 3 4 5 6 7 3 3 5 5 3 3 9

输出样例:
7

我的代码
#include<stdio.h>

int main()
{
           int n; scanf("%d",&n);
           int shuzu[n],num;
           int a,b,c=0,e;
           int count1=0,count2 = 0;
           
           for(a=0; a<n ;a++)
           {
                           scanf("%d",&num);
                           shuzu[a] = num;
           }a=0;
           
           
           while(a<n)
           {
                        for(b=c;b<n;b++)
                        {
                                if(shuzu[b] < shuzu[b+1])
                                {
                                        count1++;
                                }
                                else
                                {
                                        if(count1 <= count2)
                                        {
                                                ;
                                        }
                                        else
                                        {
                                                e = count1;
                                                count1 = count2;
                                                count2 = e;
                                        }
                                        c = b;
                                        break;
                                }        
                        }
                        a = b + 1;
           }
           
           printf("%d",count2);
           
           return 0;
}
最佳答案
2023-11-1 09:29:58
问题分析:

题目要求求出给定序列的最长连续上升子序列的长度,可以使用双指针法来解决。

修改建议:

下面是修改后的代码,可以正确计算给定序列的最长连续上升子序列的长度。
++#include <stdio.h>int main(){    int n, max_len = 1, len = 1;    scanf("%d", &n);  // 输入序列总长度    int nums[n];    for (int i = 0; i < n; i++) {        scanf("%d", &nums[i]);  // 输入序列元素    }    for (int i = 1; i < n; i++) {        if (nums[i] > nums[i - 1]) {  // 如果当前元素大于前一个元素,则更新最长子序列长度            len++;        } else {  // 否则重置最长子序列长度            len = 1;        }        max_len = len > max_len ? len : max_len;  // 更新最大长度    }    printf("%d", max_len);    return 0;}
在修改后的代码中,首先读入序列总长度和序列元素,然后使用双指针法扫描序列,统计最长连续上升子序列的长度:

1. 用一个变量记录当前最长子序列的长度,初始为1;
2. 遍历序列,如果当前元素大于前一个元素,则更新最长子序列长度,否则重置最长子序列长度;
3. 在遍历过程中,用一个变量记录最大长度。

最后输出最大长度即可。

希望能帮到你!

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-1 09:28:49 | 显示全部楼层
问题分析:这段代码的目标是找到给定序列的最长连续上升子序列的长度。但是,这段代码存在一些问题。首先,它没有正确地处理边界情况,例如当序列长度为1时。其次,它使用了两个计数器count1和count2来记录连续上升子序列的长度,但是没有正确更新它们的值。最后,它没有正确处理最后一个元素的情况。

解决方案:下面是修复这些问题的代码:
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int shuzu[n], num;
    int maxLength = 1; // 最长连续上升子序列的长度
    int currentLength = 1; // 当前连续上升子序列的长度
    
    for (int i = 0; i < n; i++) {
        scanf("%d", &num);
        shuzu[ i] = num;
    }
    
    for (int i = 1; i < n; i++) {
        if (shuzu[ i] > shuzu[i-1]) {
            currentLength++;
        } else {
            if (currentLength > maxLength) {
                maxLength = currentLength;
            }
            currentLength = 1;
        }
    }
    
    if (currentLength > maxLength) {
        maxLength = currentLength;
    }
    
    printf("%d", maxLength);
    
    return 0;
}

这段代码首先将给定序列存储在数组 shuzu 中。然后,它使用一个循环遍历数组,如果当前元素大于前一个元素,则当前连续上升子序列的长度加1;否则,将当前连续上升子序列的长度重置为1。在每次更新最长连续上升子序列的长度时,都会将当前连续上升子序列的长度与最长连续上升子序列的长度比较,如果当前连续上升子序列的长度大于最长连续上升子序列的长度,则更新最长连续上升子序列的长度。最后,输出最长连续上升子序列的长度。

希望这个解决方案对你有帮助!如果你有任何问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 09:29:58 | 显示全部楼层    本楼为最佳答案   
问题分析:

题目要求求出给定序列的最长连续上升子序列的长度,可以使用双指针法来解决。

修改建议:

下面是修改后的代码,可以正确计算给定序列的最长连续上升子序列的长度。
++#include <stdio.h>int main(){    int n, max_len = 1, len = 1;    scanf("%d", &n);  // 输入序列总长度    int nums[n];    for (int i = 0; i < n; i++) {        scanf("%d", &nums[i]);  // 输入序列元素    }    for (int i = 1; i < n; i++) {        if (nums[i] > nums[i - 1]) {  // 如果当前元素大于前一个元素,则更新最长子序列长度            len++;        } else {  // 否则重置最长子序列长度            len = 1;        }        max_len = len > max_len ? len : max_len;  // 更新最大长度    }    printf("%d", max_len);    return 0;}
在修改后的代码中,首先读入序列总长度和序列元素,然后使用双指针法扫描序列,统计最长连续上升子序列的长度:

1. 用一个变量记录当前最长子序列的长度,初始为1;
2. 遍历序列,如果当前元素大于前一个元素,则更新最长子序列长度,否则重置最长子序列长度;
3. 在遍历过程中,用一个变量记录最大长度。

最后输出最大长度即可。

希望能帮到你!

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 03:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表