給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 = 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。
第1行,1個數n,n為陣列的長度(0 <= n <= 1000)
第2 - n + 1行:aii(-10^9 <= aii <= 10^9)
如果沒有符合條件的組合,輸出no solution。
如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則繼續按照第二小的數排序。每行3個數,中間用空格分隔,並且這3個數按照從小到大的順序排列。
7
-3-2-10123
-3 0 3
-3 1 2
-2 -1 3
-2 0 2
-1 0 1
#include#includeconst int maxn=1005;
int a[maxn];
using namespace std;
int main()
return -1;
} int main()
{ int i,j;
long long sum;
bool flag=false;//標記查詢狀態
cin>>n;
for(int i=0;i>a[i];
sort(a,a+n);//對所輸入的資料進行從小到大排序
for(i=0;i=0||-sum>a[n-1])
continue;//要求三個數之和等於0,如果此時兩個數相加的絕對值大於最大的數或已經大於0,則這兩個數不能組合
int po=ef(j+1,sum);
if(po!=-1)
{cout<
三個數和為零
給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。input 第1行,1個數n,n為陣列的長度 0 n 10...
三個數的和為0
給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。input 第1行,1個數n,n為陣列的長度 0 n 10...
陣列中三個數和為零
前面看到的問題是陣列a中,和為固定值sum的兩個數。我們一般的做法是先給陣列排序,然後陣列前後各有乙個下標i j,如果a i a j sum,則j 如果a i a j 有乙個類似的擴充套件問題就是 找到乙個是陣列中和為零的三個數,一般的解決方法也是設定三個下標變數,i,j和k。每次固定i,然後尋找滿...