Arrays 如何使用cidon',找到子数组中所有元素之和为0的最大子数组的长度;我不知道错误在哪里。。请任何人告诉我

Arrays 如何使用cidon',找到子数组中所有元素之和为0的最大子数组的长度;我不知道错误在哪里。。请任何人告诉我,arrays,c,recursion,Arrays,C,Recursion,求和为0的最大子阵的c程序 我无法理解为什么我的代码运行不正常 它是不断地问我输入 请任何人尝试修复我的代码 #include <stdio.h> #include <stdlib.h> void popout(int a[100], int q, int n, int j) { int z; z = n; for (int o = q; o < n - 1; o++) { a[o] = a[o + 1]; // deletes one num

求和为0的最大子阵的c程序

我无法理解为什么我的代码运行不正常 它是不断地问我输入 请任何人尝试修复我的代码


#include <stdio.h>
#include <stdlib.h>
void popout(int a[100], int q, int n, int j) {
  int z;
  z = n;
  for (int o = q; o < n - 1; o++) {
    a[o] = a[o + 1]; // deletes one number
  }
  int g = j;
  if (g != 1) {
    z--; /*function calls recursively till we are deleting only one number*/
    for (int i = 0; i < n; i++) {
      popout(a, a[i], z, g - 1); /* after deleting one number again
                                 again runs a loop to delete other
                                 number from already deleted array*/
    }
    g--;
  }
}

int main() {
  int n;
  int f;
  int a[100];
  int b[100];
  printf("enter number of elemnts");
  scanf("%d", &n);
  printf("enter elements");
  for (int i = 0; i < n; i++)
    scanf("%d", &a[i]);
  for (int i = 0; i < n; i++)
    b[i] = a[i];
  for (int j = 1; j < n; j++)
    a[0] = a[0] + a[j];
  if (a[0] == 0)
    printf("%d", n);
  for (int i = 0; i < n; i++)
    a[i] = b[i];
  /* pop out number by number */
  for (int p = 1; p < n; p++) { // p:number of elements to be deleted at onece
    for (int i = 0; i < n; i++) {
      popout(a, a[i], n, p);
      for (int g = 1; g < n - 1; g++) {
        a[0] += a[g];
      }
      if (a[0] == 0) {
        printf("%d", n - p);
        exit;
      } else {
        for (int i = 0; i < n; i++)
          a[i] = b[i];
      }
    }
  }
}

#包括
#包括
无效弹出(int a[100],int q,int n,int j){
intz;
z=n;
对于(into=q;o
此问题是最大子阵列问题()的变体。解决这个问题的更有效的解决方案是使用哈希映射


一个C实现正在进行中,并且

是否有您正在尝试实现的特定算法?顶部的注释表示它一直在请求输入。您的问题是从命令行读取数据,还是查找特定子阵列的算法?“未正确运行”不是一个有用的问题描述。请说得更具体些。请给出准确的输入、预期结果和实际结果。另外,您是否对问题进行过调试?在调试器中运行您的程序,并逐行执行。自从您编写
printf(“输入元素”)以来,“它一直在要求我输入”;对于(inti=0;i?您必须提供有关问题的更多上下文,否则我认为这不是您的代码。解决此问题的最佳方法是在IDE中插入断点(即您编辑代码的断点)并在调试模式下运行,以查看每个断点的实际情况。在您的情况下,只需在
scanf()
上插入断点,并在其上方插入
for
。我想OP更感兴趣的是知道他们的代码为什么不工作。此外,如果我没有错,你提出的链接涉及C++代码,而不是C代码。