最好的我们! 2024-02-28 13:54 采纳率: 50%
浏览 6
已结题

关于#c语言#的问题,请各位专家解答!

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
我的代码哪里有错?为什么输入不了?C语言


```c
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>           //最大连续1的个数
#include <stdlib.h> 

int findMaxConsecutiveOnes(int* nums, int numsSize)
{
    while (*nums==0||*nums==1)
    {
        int max = 0;
        if (*nums == 1)
        {
            max++;
            if (max > numsSize)
                numsSize = max;
        }
        else max = 0;
        nums++;
    }
    return numsSize;
}

int main()
{
    int nums[10000000],i=0;
    while (nums[i] == 0 || nums[i] == 1)
    {
        scanf("%d", &nums[i]);
        i++;
    }
    int max = 0;
    printf("%d", findMaxConsecutiveOnes( nums, max));
    return 0;
}

下面这段代码为什么输出是1?错在哪里?
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>           //最大连续1的个数
#include <stdlib.h> 

int findMaxConsecutiveOnes(int* nums, int numsSize)
{
    while (*nums==0||*nums==1)
    {
        int max = 0;
        if (*nums == 1)
        {
            max++;
            if (max > numsSize)
                numsSize = max;
        }
        else max = 0;
        nums++;
    }
    return numsSize;
}

int main()
{
    int nums[]={1,1,1,0,1,1,1,1,1,0,0}, i = 0;
    /*while (nums[i] == 0 || nums[i] == 1)
    {
        scanf("%d", &nums[i]);
        i++;
    }*/
    int max = 0;
    printf("%d", findMaxConsecutiveOnes( nums, max));
    return 0;
}

```

  • 写回答

3条回答 默认 最新

  • a5156520 2024-02-28 14:19
    关注

    将max的初始赋值放到while循环前面,然后其他地方也可以修改下。

    修改如下:

    #define  _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>           //最大连续1的个数
    #include <stdlib.h> 
    
    int findMaxConsecutiveOnes(int* nums, int  numsSize)
    {
        int max = 0; // 将变量max初始赋值为0,放到while循环前面 
        int maxSize=0;
        int i=0;
        while (i<numsSize)  // 当下标变量i超过数组最大下标后停止循环 
        {
            
            if (*nums == 1)
            {
                max++;
                if (max > maxSize)
                    maxSize = max;  // 记录当前最大连续1的个数到变量maxSize中 
            }
            else max = 0;
            nums++;
            i++;
        }
        return maxSize;  // 返回最大连续1的个数maxSize 
    }
    
    int main()
    {
        int nums[]={1,1,1,0,1,1,1,1,1,0,0}, i = 0;
        //int nums[]={0,0}, i = 0;
        /*while (nums[i] == 0 || nums[i] == 1)
        {
            scanf("%d", &nums[i]);
            i++;
        }*/
        int max = 0;
        int length=sizeof(nums)/sizeof(int);  // 数组nums的长度 
        //printf("length=%d\n",length);
        printf("%d", findMaxConsecutiveOnes( nums, length));
        return 0;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 2月28日

悬赏问题

  • ¥100 对接美团闪购医药接口相关问题
  • ¥15 嵌入式软件电子烟开发
  • ¥15 职场 Excel 查重问题
  • ¥20 multisim方波发生电路产生的波形异常,学校没讲模电就留了实验qwq
  • ¥15 求怎么用idea2021.3.2创建web项目并配置tomcat
  • ¥100 or-tools的相关问题
  • ¥15 有可能用平板通过拓展坞来烧录程序吗(keil5的那种)
  • ¥15 状态图的并发态问题咨询
  • ¥15 PFC3D,plot
  • ¥15 VAE模型编程报错无法解决