tipo int de búsqueda binaria
La idea básica : la mitad idea básica es encontrar un tiempo para encontrar el estrecho medio Look
int LowerBound(int a[], int target, int left, int right)
{
while(right >= left)
{
int mid = left + (right - left) / 2;//防止left + right导致上溢
if(a[mid] > target) right = mid - 1;
else if(a[mid] < target) left = mid + 1;
else if(a[mid] == target) return mid;
}
return -1;
}
Con el fin de prevenir la aparición de desbordamiento izquierda + derecha, puede ser intercambiado por + izquierda (derecha - izquierda) / 2
Tratando de encontrar ejemplos en los que la posición de elemento de la matriz
#include <stdio.h>
int LowerBound(int a[], int target, int left, int right)
{
while(right >= left)
{
int mid = left + (right - left) / 2;//防止left + right导致上溢
if(a[mid] > target) right = mid - 1;
else if(a[mid] < target) left = mid + 1;
else if(a[mid] == target) return mid;
}
return -1;
}
int main(void)
{
int a[105] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int ans;
ans = LowerBound(a, 11, 0, 9);
if(ans >= 0) printf("%d", ans);
else printf("NO");
return 0;
}
una doble búsqueda binaria
tipo int y similares, la única diferencia es el tipo de matrimonio
, mientras que - (derecha-izquierda> 0,0000001)
la función ejemplo tz del hermano mayor
tema de fondo
tz jefes de la distante Himalaya desenterrado unas funciones NN orden, con el fin de estudiar la magia de la función, tzdalao las funciones delegadas en el club de programación.
Formato de entrada
La primera línea, un número entero positivo N y dos números reales II, rr, que muestra la gama intervalo cerrado.
Segunda fila, N + 1 N + 1 número real, de izquierda a derecha representa los coeficientes de las funciones.
Formato de salida
Valor de salida de x, redondeado a cinco decimales.
entrada de la muestra
3 -0,9981 0,5
1 -3 -3 1
Ejemplo de salida
-0.41421
explicación
. = 3 por encima de n- muestra, X 3. - 3x 2 -. 3x + 1
La resolución de problemas ideas: coeficientes de entrevistas función de derivación en una matriz, usando la dicotomía de encontrar una derivada es cero
Código AC
include <stdio.h>
#include <math.h>
double a[100] = {0}, n, ans1, mid;
double y(double x)//判断一阶导数的大小
{
double j = n-1, ans = 0;
for(int i = 0 ; i < n && j >= 0; i++, j--)
{
ans += a[i]*pow(x, j);
}
return ans;//返回一阶导数的值
}
int main(void)
{
double temp;
double l, r;
scanf("%lf%lf%lf", &n, &l, &r);
temp = n;
for(int i = 0; i <= n; i++)
{
scanf("%lf", &a[i]);
a[i] = a[i]*temp;//求一阶导数的系数
temp -= 1;
}
while(r - l > 0.0000001)。。二分查找
{
mid = (r+l)*1.0/2;
if(y(mid) > 0) l = mid;
else r = mid;
}
printf("%.5lf", mid);
return 0;
}