1090 3個數和為0
基準時間限制:1 秒 空間限制:131072 kb 分值: 5
難度:1級演算法題
給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 = 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。
input
第1行,1個數n,n為陣列的長度(0 <= n <= 1000)output第2 - n + 1行:a[i](-10^9 <= a[i] <= 10^9)
如果沒有符合條件的組合,輸出no solution。input示例如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則繼續按照第二小的數排序。每行3個數,中間用空格分隔,並且這3個數按照從小到大的順序排列。
7output示例-3-2-10
123
-3 0 3-3 1 2
-2 -1 3
-2 0 2
-1 0 1
先對所有數字進行排序,然後從最小的數依次向後查詢,然後第二個數從第乙個數之後乙個個嘗試,但第三的可以用二分查詢,看是否存在,
//非二分法
#include #include using namespace std ;
int a[1010];
int main()
if(j>= k) break;
if(a[i]+a[j]+a[k]==0)}}
if(!flag)
}return 0;
}
//二分法
#include#include#include#include#includeusing namespace std;
int binary_search(int* a, int low ,int len, int goal)
//沒找到
return -1;
} int main()
; int n;
cin>>n;
for(int i=0;i>num[i];
} sort(num,num+n);
int flag=0;
int tn=0;
for(;tn=0)break;
for(int i=0;i
51nod 1090 3個數和為0
1090 3個數和為0 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小...
51Nod 1090 3個數和為0
給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和等於0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。input 第1行,1個數n,n為陣列的長度 0 n 1...
51NOD1090 3個數和為0
這道題的基本思想是尺取,題目的原型大概是給出一組數,讓你找到和值為特定值的兩個數的組合。尺取法 先排序,分別用乙個first指標指向第乙個數,last指標指向最後乙個數,如果first指著的數 last指著的數 特定值,last不動,first 反之,first不動,last 直到last和firs...