如何返回与给定数字之和相等的数字数组列表 我在C++中练习数组。我做的是数组中的数和等于给定的数。我有这样的代码 bool hasArrayTwoCandidates(int arr[], int arr_size, int sum) { int l, r; /* Sort the elements */ sort(arr, arr + arr_size); /* Now look for the two candidates in the sorted array*/ l = 0; r = arr_size - 1; while (l < r) { if (arr[l] + arr[r] == sum) return 1; else if (arr[l] + arr[r] < sum) l++; else // A[i] + A[j] > sum r--; } return arr[l]; } /* Driver program to test above function */ int main() { int arr[] = { 1, 4, 45, 6, 10, -8 }; int n = 16; int arr_size = sizeof(arr) / sizeof(arr[0]); // Function calling cout<<hasArrayTwoCandidates(arr, arr_size, n); return 0; } bool hasarraytwo(int arr[],int arr\u size, 整数和) { int l,r; /*对元素进行排序*/ 排序(arr、arr+arr\U大小); /*现在,寻找两位候选人 排序数组*/ l=0; r=arr_尺寸-1; while(l STD::向量< /代码>之类的东西,这样你就不必单独通过数组长度,也就不需要像 siZeof(ARR)/siZeof之类的笨拙的计算(ARR〔0〕)。hasarraytwo候选者返回一个bool,这可能表明是否可以将arr的两个元素相加为sum。实际返回语句return arr[l]似乎并没有…真的像那样做。仔细看看l和r的状态在循环完成后是什么,决定要返回什么(一个布尔值?一对整数?某种std::可选的构造?),然后返回该值。@NathanPierson是的,你说得对。确切地说,我想返回数组中的数字列表,这些数字的总和等于给定的数字。这意味着我想返回Int。你能帮我完成下一步吗?请记住,Int的返回类型是单个Int。如果你如果您想返回多个,您可以使用类似于std::pair的返回类型。您可以找到相关的。sizeof(arr)/sizeof(arr[0])您可以使用std::size(arr)。 #include<bits/stdc++.h> using namespace std; vector<pair<long long,long long>> ans; /* ans array for holding answer's pair values */ bool hasArrayTwoCandidates(vector<long long> &a,long long sum){ bool flag=0; // Tracks if the sum pairs exists or not // sorting the array sort(a.begin(),a.end()); long long l=0,r=a.size()-1; while(l<r){ long long p=a[l]+a[r]; if(p==sum){ flag=1; ans.push_back(make_pair(a[l],a[r])); l++; r--; } else{ if(p<sum) l++; else if(p>sum) r--; } } return flag; } /* Driver program to test above function */ int main(){ ios_base::sync_with_stdio(false); cin.tie(0); vector<long long> a{ 1, 4, 45, 6, 10, -8 }; /* Input array */ long long sum=16; if(hasArrayTwoCandidates(a,sum)){ cout<<"List of number equal to "<<sum<<" is : \n"; for(long long i=0;i<ans.size();i++){ cout<<ans[i].first<<" , "<<ans[i].second<<"\n"; } } else cout<<"There are no such pairs"; }

如何返回与给定数字之和相等的数字数组列表 我在C++中练习数组。我做的是数组中的数和等于给定的数。我有这样的代码 bool hasArrayTwoCandidates(int arr[], int arr_size, int sum) { int l, r; /* Sort the elements */ sort(arr, arr + arr_size); /* Now look for the two candidates in the sorted array*/ l = 0; r = arr_size - 1; while (l < r) { if (arr[l] + arr[r] == sum) return 1; else if (arr[l] + arr[r] < sum) l++; else // A[i] + A[j] > sum r--; } return arr[l]; } /* Driver program to test above function */ int main() { int arr[] = { 1, 4, 45, 6, 10, -8 }; int n = 16; int arr_size = sizeof(arr) / sizeof(arr[0]); // Function calling cout<<hasArrayTwoCandidates(arr, arr_size, n); return 0; } bool hasarraytwo(int arr[],int arr\u size, 整数和) { int l,r; /*对元素进行排序*/ 排序(arr、arr+arr\U大小); /*现在,寻找两位候选人 排序数组*/ l=0; r=arr_尺寸-1; while(l STD::向量< /代码>之类的东西,这样你就不必单独通过数组长度,也就不需要像 siZeof(ARR)/siZeof之类的笨拙的计算(ARR〔0〕)。hasarraytwo候选者返回一个bool,这可能表明是否可以将arr的两个元素相加为sum。实际返回语句return arr[l]似乎并没有…真的像那样做。仔细看看l和r的状态在循环完成后是什么,决定要返回什么(一个布尔值?一对整数?某种std::可选的构造?),然后返回该值。@NathanPierson是的,你说得对。确切地说,我想返回数组中的数字列表,这些数字的总和等于给定的数字。这意味着我想返回Int。你能帮我完成下一步吗?请记住,Int的返回类型是单个Int。如果你如果您想返回多个,您可以使用类似于std::pair的返回类型。您可以找到相关的。sizeof(arr)/sizeof(arr[0])您可以使用std::size(arr)。 #include<bits/stdc++.h> using namespace std; vector<pair<long long,long long>> ans; /* ans array for holding answer's pair values */ bool hasArrayTwoCandidates(vector<long long> &a,long long sum){ bool flag=0; // Tracks if the sum pairs exists or not // sorting the array sort(a.begin(),a.end()); long long l=0,r=a.size()-1; while(l<r){ long long p=a[l]+a[r]; if(p==sum){ flag=1; ans.push_back(make_pair(a[l],a[r])); l++; r--; } else{ if(p<sum) l++; else if(p>sum) r--; } } return flag; } /* Driver program to test above function */ int main(){ ios_base::sync_with_stdio(false); cin.tie(0); vector<long long> a{ 1, 4, 45, 6, 10, -8 }; /* Input array */ long long sum=16; if(hasArrayTwoCandidates(a,sum)){ cout<<"List of number equal to "<<sum<<" is : \n"; for(long long i=0;i<ans.size();i++){ cout<<ans[i].first<<" , "<<ans[i].second<<"\n"; } } else cout<<"There are no such pairs"; },c++,C++,您只需要将结果和的值存储在对的某个外部向量中。 我也修改了你的函数 代码 #包括 使用名称空间std; 向量ans;/*ans数组,用于保存应答的对值*/ bool hasarraytwo候选(向量&a,长和){ bool flag=0;//跟踪和对是否存在 //排序数组 排序(a.begin(),a.end()); 长l=0,r=a.size()-1; 虽然你使用C++,但你应该真正利用诸如“代码> STD::向量< /代码>之类的东西,这样你就不必单独通过数组长度,也就不需要像 siZeo

您只需要将结果和的值存储在对的某个外部向量中。
我也修改了你的函数

代码

#包括
使用名称空间std;
向量ans;/*ans数组,用于保存应答的对值*/
bool hasarraytwo候选(向量&a,长和){
bool flag=0;//跟踪和对是否存在
//排序数组
排序(a.begin(),a.end());
长l=0,r=a.size()-1;

虽然你使用C++,但你应该真正利用诸如“代码> STD::向量< /代码>之类的东西,这样你就不必单独通过数组长度,也就不需要像<代码> siZeof(ARR)/siZeof之类的笨拙的计算(ARR〔0〕)。
hasarraytwo候选者
返回一个
bool
,这可能表明是否可以将
arr
的两个元素相加为
sum
。实际返回语句
return arr[l]
似乎并没有…真的像那样做。仔细看看
l
r
的状态在循环完成后是什么,决定要返回什么(一个布尔值?一对整数?某种
std::可选的
构造?),然后返回该值。@NathanPierson是的,你说得对。确切地说,我想返回数组中的数字列表,这些数字的总和等于给定的数字。这意味着我想返回Int。你能帮我完成下一步吗?请记住,
Int
的返回类型是单个
Int
。如果你如果您想返回多个,您可以使用类似于
std::pair
的返回类型。您可以找到相关的。
sizeof(arr)/sizeof(arr[0])
您可以使用
std::size(arr)

#include<bits/stdc++.h>
using namespace std;
    
vector<pair<long long,long long>> ans;    /* ans array for holding answer's pair values */
    

bool hasArrayTwoCandidates(vector<long long> &a,long long sum){
     bool flag=0;  // Tracks if the sum pairs exists or not 
     
     // sorting the array 
     
     sort(a.begin(),a.end());
     
     long long l=0,r=a.size()-1;
     
     while(l<r){
         long long p=a[l]+a[r];
         
         if(p==sum){
             flag=1;
             ans.push_back(make_pair(a[l],a[r]));
             l++;
             r--;
         }
         else{
             if(p<sum)
             l++;
             
             else
             if(p>sum)
             r--;
         }
     }
     
     return flag;
  
}

 
/* Driver program to test above function */

int main(){
    
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    vector<long long> a{ 1, 4, 45, 6, 10, -8 };      /* Input array */
    long long sum=16;   

  
    if(hasArrayTwoCandidates(a,sum)){
        cout<<"List of number equal to "<<sum<<" is : \n";
        for(long long i=0;i<ans.size();i++){
            cout<<ans[i].first<<" , "<<ans[i].second<<"\n";
        }
    }
    else
    cout<<"There are no such pairs";
 
}