Arrays 如何使用cidon',找到子数组中所有元素之和为0的最大子数组的长度;我不知道错误在哪里。。请任何人告诉我
求和为0的最大子阵的c程序 我无法理解为什么我的代码运行不正常 它是不断地问我输入 请任何人尝试修复我的代码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
#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代码。