【问题标题】:Optimize code-Maximum Element in an Array using functions使用函数优化数组中的代码最大元素
【发布时间】:2016-05-22 04:11:57
【问题描述】:

我是在这里发布问题的新手,但一直在寻找答案。我创建了这段代码来返回数组 x[] 中的最大元素。我确实得到了结果,但并不是所有的测试用例都通过了。我已经检查了很多次,但不知道要做什么来纠正它。 我在我的在线培训的一部分中这样做,所以测试用例值不是公开可见的。该代码产生了 85.71% 的积极结果。请帮我做100%。谢谢。
问题是创建一个函数 findMax(int n,int *a) 来返回最大元素。在哪里
第一个参数对应于数组中元素的数量。
第二个参数对应于指向数组的指针。

#include<stdio.h>
int findMax(int n,int *a)
{
  int i,max=a[0]=0;
  for(i=1;i<=n;i++)
  {
    if(a[i]>max)
    max=a[i];
  }
  return(max);
}
int main()
{
  int i,x[16],k,max;
  printf("Enter the number of elements in the array\n");
  scanf("%d",&k);
  printf("Enter the elements in the array\n");
  for(i=1;i<=k;i++)
  {
    scanf("%d",&x[i]);
  }
  max=findMax(k,x);
  printf("The maximum element in the array is %d",max);
  return 0;
}

我是编码初学者,所以更简单的解释可能会有所帮助。再次感谢

【问题讨论】:

  • a[n] 也越界了。
  • 换句话说,C 中的所有数组都是从零开始的,所以for(i=1;i&lt;=n;i++) 应该是for(i=0;i&lt;n;i++)。您还必须在每次调用 scanf 时验证它的返回。

标签: c++ c arrays function


【解决方案1】:
max=a[0]=0;

这会将a[0]max 都设置为0。

main() 中的循环从索引 1 开始填充数组。在此处将 a[0] 设置为 0 完全没有任何作用。这本身不是问题,但将 max 设置为 0 是问题。这是因为如果 main() 初始化的数组中的所有元素都是负数,那么由于 max 最初设置为 0,因此返回的最大值将为 0,而不是数组中的最大负值。

您应该进行以下更改。

1) main() 中的循环不应填充x[1]x[k],而是填充x[0]x[k-1]。 C 和 C++ 中的数组传统上是从 0 开始的。

2) 你的函数中的循环也应该相应地调整,当然它不应该将a[0] 设置为0。它应该简单地设置max=a[0]

【讨论】:

  • 从 1 开始数组是我的错误,是的,将 0 分配给 max 也是。它现在工作正常。赞!
【解决方案2】:
#include<stdio.h>
int findMax(int i,int *a)
{
     max=a[0]; // you were setting a[0] to zero
     for(i=1;i<n;i++) // there are n numbers beginning from position 0 
     {
       if(a[i]>max)
       max=a[i];
      }
    return(max);
 }
int main()
{
  int i,x[16],k,max;
  printf("Enter the number of elements in the array\n");
  scanf("%d",&k);
  printf("Enter the elements in the array\n");
  for(i=0;i<k;i++)
  {
  scanf("%d",&x[i]);
  }
  max=findMax(k,x);
  printf("The maximum element in the array is %d",max);
  return 0;
}

【讨论】:

    【解决方案3】:

    在您的代码中,您设置了 max=0。考虑所有数字都是负数的测试用例,那么您的代码将返回不正确的 0。

    正确方法: 将 max 分配给数组的第一个元素并检查剩余元素的条件。 如果第一个元素是最大值,那么它将被返回,否则返回更新的最大值(通过循环检查后)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-23
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2011-10-30
      相关资源
      最近更新 更多