先得到任意兩個數的和,從小到大排序,從兩邊向中間掃一遍就行了
#include #include using namespace std;
typedef long long ll;
int a[1005];
struct nodesum[1005 * 1005];
bool cmp(struct node a,struct node b)
int main(void)
int cnt = 0;
for(int i = 1;i <= n; i++)
//記錄這兩個數的下標
sum[cnt].l = i;
sum[cnt].r = j;
sum[cnt++].sum = a[i] + a[j];
} }sort(sum,sum + cnt,cmp);
int flag = 0;
int l = 0,r = cnt - 1;
while(l <= r)
//大於0說明大的那個數過於大了,所以大數向左移
else if(temp > 0)
else
//沒有重複,直接退出
else
} }if(flag == 1)
else
return 0;
}
51nod 1267 4個數和為0
思路 先n 2預處理出所有兩兩的組合,那麼就變成要找a b 0的問題了,那麼排序o n 去找就可以了 includeusing namespace std define ll long long const int maxn 1005 1005 struct node node maxn bool ...
51nod 1090 3個數和為0
1090 3個數和為0 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小...
51nod 1090 3個數和為0
1090 3個數和為0 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小...