給出n個整數,你來判斷一下是否能夠選出4個數,他們的和為0,可以則輸出"yes",否則輸出"no"。
input
第1行,1個數n,n為陣列的長度(4 <= n <= 1000)
第2 - n + 1行:aii(-10^9 <= aii <= 10^9)
output
如果可以選出4個數,使得他們的和為0,則輸出"yes",否則輸出"no"。
sample input
5-11sample output-524
yes解題思路:二分思想,但是四個數只有乙個可以二分,所以就要把4個數變成兩個,把任意兩個數結合,存上兩個數的下標,然後就變成2個數匹配兩個數,就可以用二分,需要解決的就是不能讓這四個數一樣
#include #include #include #include using namespace std;
struct node
b[1000009];
int a[1009],num;
int erfen(int i,long long int x,int l,int r)
l--;
}while(b[r].sum==x&&r<=num)
r++;
}if(flag)
return 1;
else return 0;
}else if(b[mid].sumelse
}return 0;
}int cmp(node x,node y)
int main()
num=0;
for(i=1; i<=n; i++)
}sort(b+1,b+1+num,cmp);
int flag=0;
for(i=1; i<=num; i++)
}if(flag) printf("yes\n");
else printf("no\n");
return 0;
}
3個數和為0 51Nod 1090
給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。input 第1行,1個數n,n為陣列的長度 0 n 10...
51nod1267 四個數和為0
先得到任意兩個數的和,從小到大排序,從兩邊向中間掃一遍就行了 include include using namespace std typedef long long ll int a 1005 struct nodesum 1005 1005 bool cmp struct node a,str...
4個數和為0
給出n個整數,你來判斷一下是否能夠選出4個數,他們的和為0,可以則輸出 yes 否則輸出 no input 第1行,1個數n,n為陣列的長度 4 n 1000 第2 n 1行 a i 10 9 a i 10 9 output 如果可以選出4個數,使得他們的和為0,則輸出 yes 否則輸出 no in...