C++ 检查阵列是否可以拆分为总和相等的子阵列

C++ 检查阵列是否可以拆分为总和相等的子阵列,c++,C++,我面临的问题是,当我使用cin>>arr时,我无法运行我的代码 我能用这个代码工作吗 #include <bits/stdc++.h> using namespace std; int checkEqualSumUtil(int arr[1000], int N, int sm1, int sm2, int sm3, int j) { if (j == N) { if

我面临的问题是,当我使用cin>>arr时,我无法运行我的代码 我能用这个代码工作吗

  #include <bits/stdc++.h>
using namespace std;

 int checkEqualSumUtil(int arr[1000], int N,
                int sm1, int sm2,
                int sm3, int j)
        {
     if (j == N)
        {
 if (sm1 == sm2 && sm2 == sm3)
 return 1;
    else
  return 0;
 }

    else
      {

int l = checkEqualSumUtil(arr, N,
                        sm1 + arr[j],
                        sm2, sm3, j + 1);


int m = checkEqualSumUtil(arr, N, sm1,
                        sm2 + arr[j],
                        sm3, j + 1);

int r = checkEqualSumUtil(arr, N, sm1, sm2,
                        sm3 + arr[j], j + 1);

return max(max(l, m), r);
        }
  }

      void checkEqualSum(int arr[], int N)
     {
      int sum1, sum2, sum3;

        sum1 = sum2 = sum3 = 0;

   if (checkEqualSumUtil(arr, N, sum1,
                    sum2, sum3, 0)== 1)
{
cout << "YES";
          }
       else
 {
    cout << "NO";
}
 }

  int main()
  {
    int n;
  cin>>n;
 int arr[n/2];
 for(int i=0;i<n;i++){
cin>>arr[i];


        int N = sizeof(arr) / sizeof(arr[0]);

     checkEqualSum(arr, N);
   return 0;
      }}
#包括
使用名称空间std;
int checkEqualSumUtil(int arr[1000],int N,
int sm1,int sm2,
int sm3,int j)
{
如果(j==N)
{
如果(sm1==sm2&&sm2==sm3)
返回1;
其他的
返回0;
}
其他的
{
int l=检查等式SUMUTIL(arr,N,
sm1+arr[j],
sm2,sm3,j+1);
int m=检查等式SUMUTIL(arr,N,sm1,
sm2+arr[j],
sm3,j+1);
int r=checkEqualSumUtil(arr,N,sm1,sm2,
sm3+arr[j],j+1);
返回最大值(最大值(l,m,r);
}
}
无效校验等式(整数arr[],整数N)
{
int sum1、sum2、sum3;
sum1=sum2=sum3=0;
如果(检查equalsumutil(arr,N,sum1,
sum2,sum3,0)==1)
{
cout n;
国际航空公司[n/2];
对于(int i=0;i>arr[i];
int N=sizeof(arr)/sizeof(arr[0]);
方格(arr,N);
返回0;
}}
我的代码

我已编辑代码,输入正确

但它总是不输出

我不知道为什么会有什么想法

也谢谢你帮助我所有人

我试过输入

三,

11

应该是的


输出是否为否?

让我们在
main
中分析代码:

int main()
{
    int arr[1000],n;
您已分配了一个数组,
arr
,其容量为1000个整数。
数组未初始化

另一项声明:

const unsigned int N = 1000;
int array[N];  
下面的语句读取要读入数组的数字数量

 cin>>n;
如果用户或操作员输入的值大于1000,则您将有未定义的行为。小于1000的数量会浪费空间。当运行时容量未知时,请使用
std::vector
包含元素

for(int i=0;i<n;i++)
{
    cin>>arr[i];
}
不需要上述行。另一个选项是使用宏:

#define MAXIMUM_NUMBERS (1000)
下面语句的当前形式告诉函数使用1000个值,而不考虑用户输入的数字数量

checkEqualSum(arr, N);
例如,如果我输入5个数字,函数调用将转换为:

checkEqualSum(arr, 1000);
这是因为您已将
N
初始化为阵列的容量

 cin>>n;
也许您希望将读取的数字量传递到数组中:

checkEqualSum(arr, n);
这就是为什么变量名的区别不仅仅限于大小写

这段代码很好,告诉操作系统您的代码运行时没有错误

return 0;
} 

你对C++、编程语言的具体技术问题是什么?我输入了一个测试用例,比如5 1,2,3,1,4,它既不显示“不是”也不显示,而是当我使它成为ARR[]= {1,2,3,4/1}时它显示了C++语言中没有一个过载的<代码> >运算符>代码>数组。如果你看到我的代码,我就用它,因为你不知道编译时数组的容量,使用<代码> STD::vector < /COD>和<代码> PuxSuff-< /Case>方法。向量更容易通过,并且可以查询它们的大小。.我不理解你的评论。我的意思是,现在一切都很顺利,但我仍然有一个问题它总是打印不..这与我回答的问题不同。使用调试器,然后在必要时发布另一个问题。如果这个答案有用,请单击复选标记。是的,我解决了第一个问题,然后出现了另一个问题