一包笼子 2023-11-14 09:02 采纳率: 83.3%
浏览 22
已结题

c语言 找最长序列问题

#c语言 找最长连续序列的问题
代码思路如下:先把输入的数排序,之后判断前后数是否连续,若连续,则数量(b)+1,新数组存数,若不连续,则数量清零,数组下标+1,最后将存数的数组排序,输出最后一个值。
但是输出有问题

img

img

img

#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int a[n];
    for (int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    /*
    将数组排个序   冒泡排序
    */
    int m=0,v;
    do{
        for(int i=0;i<n-1;i++){
            if(a[i]>a[i+1]){
                v=a[i+1];
                a[i+1]=a[i];
                a[i]=v;
            }
            m++;
        }
    }while(m<=n);
//    for (int i=0;i<n;i++){
//        printf("%d ",a[i]);
//    }
    /*
    创建数组c来存b的值
    如果数组a满足 则b+1,
    若不满足 b清零 数组下标+1 
    */ 
    int b=1,c[100],d=0,e; 
    for (int i=0;i<n;i++){
        if(a[i]==a[i+1]-1){
            b++;
            c[d]=b;
        }else{
            d++;
            b=1;
        }
        e=d;
    }
    /*
    将数组c用冒泡法排序 找到最大值
    */ 
    int t,l=0;
    do{
        for(int i=0;i<e-1;i++){
            if(c[i]>c[i+1]){
                t=c[i+1];
                c[i+1]=c[i];
                c[i]=t;
            }
            l++;
        }
    }while(l<=e);
    printf("%d",c[e-1]);
    return 0;
}

  • 写回答

3条回答 默认 最新

  • 柯本 2023-11-14 11:08
    关注

    你的排序有问题,是个死循环,后面的更是完全不对,有下标溢出i<n, a[i+1] .还有只要第一个数不连续就 d++;导致 c[0]是个随机等。
    你的算法想我复杂了,简单的我写了参考(前部分改了你的)

    #include <stdio.h>
    int main()
    {
      int n;
      scanf("%d", &n);
      int a[n];
      for (int i = 0; i < n; i++)
        {
          scanf("%d", &a[i]);
        }
      /*
      将数组排个序   冒泡排序
      */
      int m = 0, v;
      do
        {
          for (int i = 0; i < n - m - 1; i++) //要用这个
            {
              if (a[i] > a[i + 1])
                {
                  v = a[i + 1];
                  a[i + 1] = a[i];
                  a[i] = v;
                }
            }
          m++; //位置不对了
        }
      while (m < n); //只要<
      int len, maxlen;
      len = maxlen = 1;
      for (int i = 0; i < n - 1; i++)
        {
          if (a[i] + 1 == a[i + 1])
            {
              len++;
              if (len > maxlen)
                maxlen = len;
            }
          else
            {
              len = 1;
            }
        }
      printf("%d\n", maxlen);
      return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月14日
  • 创建了问题 11月14日

悬赏问题

  • ¥15 oracle数据库备份、
  • ¥15 关于Finetune模型,CUDA error: device-side assert triggered 报错
  • ¥15 能将阿里云上多个设备的信息能上传给小程序吗
  • ¥50 QT6.7 Camera预览窗口,camera分辨率设置
  • ¥15 车机是安卓4.4.3,车机没有gps,我想用外置蓝牙gps。所以在用安卓模拟位置服务时候,我下载的相关软件不显示在列表里
  • ¥15 matlab水位控制系统(详解)
  • ¥15 CST软件仿真,已知中心线方程构建图形
  • ¥15 supLink 用户定位
  • ¥15 odoo17生产成品入出库会计日记账设置及自动产生会计分录
  • ¥15 MCU控制20V PWM波输出的控制电路