求三個數 和為1 貪心演算法

2021-08-22 10:25:37 字數 1024 閱讀 2906

給出乙個長度為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,然後尋找滿...