解方程(C++)---二分法

題目詳情
給出n個整數和x,請問這n個整數中是否存在三個數a,b,c使得ax2+bx+c=0,數字可以重複使用。
 

輸入描述:

第一行兩個整數n,x
第二行n個整數a[i]表示可以用的數
1 <= n <= 1000, -1000 <= a[i], x <= 1000
 

輸出描述:

YES表示可以
NO表示不可以
 

輸入

2 1 1 -2
 

輸出

YES

 


 

要使用二分法解答此題,我覺得應該先找到該在哪使用二分法。
其實要解這個ax^2+bx+c=0二元一次方程,因爲x是固定的,所以只需要確定a和b後,用二分法查找是否有滿足條件的c,如果有則直接輸出"YES"後return 0,如果遍歷完後發現沒有則輸出"NO"後return 0 。

 



-AC代碼

#include <iostream>
#include <algorithm>
using namespace std;

int n, a[1000];
bool find(int temp) { //採用 二分查找 
	int l = 0, r = n - 1;
	while (l <= r) {
		int mid = (l+r)/2;
		if (a[mid] == temp) {
			return true;
		}
		else if (a[mid] > temp) {
			r = mid - 1;
		}
		else {
			l = mid + 1;
		}
	}
	
	return false;
}

int main()
{
	int x;
	cin>>n>>x;
	for(int i = 0; i < n; i++) cin>>a[i];
	sort(a, a+n); //排序是使用二分法的前提 
	
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < n; j++)
		{
			int temp = a[i]*x*x + a[j]*x;
			if (find(-temp)) {
				cout<<"YES";
				return 0;
			}
		}
	}
	
	cout<<"NO";
	return 0;
}

結果

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章