Article View: es.comp.os.linux.programacion
Article #1844Re: Reto de programacion algoritmica
From: Oscar Garcia
Date: Wed, 03 Aug 2005 14:41
Date: Wed, 03 Aug 2005 14:41
65 lines
2692 bytes
2692 bytes
El Wed, 3 Aug 2005 13:27:21 +0200, "Tomey" <kiketomey@hotmail.com>
escribi�:
>Existe algun algoritmo que dado un array tal que asi:
>14 | 36 | 45 | 8 | 45 | 55 | 55 | 55
>Haga arrays de elementos en los que que la suma de n elementos del array sea
>lo mas proxima a 100.
�Qu� margen aceptas? Supongamos un margen absoluto (+/-)M.
A bote pronto podr�amos usar la propiedad binaria de los n�meros para
que nos generasen todas las combinaciones de n�meros. Estar�amos
limitados a 32 o 64 n�meros en el array pero es la forma m�s r�pida
que se me ocurre ahora mismo:
#include <stdin.h>
#define N 8
#define C 100.0
#define M 10.0
double matriz[N] = { 14, 36, etc};
int main () {
unsigned int i, maximo = (2 >> N) - 1; // En este caso 255
double suma;
for (i = 0; i <= maximo; i++) {
if (abs (sumar (i) - C) <= M) {
solucion (i);
}
}
}
Ahora podemos definir sumar y solucion como:
double sumar (unsigned int n) {
int i;
double suma = 0;
for (i = 0; i < N; i++) {
if ((1 >> i) & n) {
suma += matriz[i];
}
}
}
void solucion (unsigned int n) {
int i;
printf("Solucion:");
for (i = 0; i < N; i++) {
if ((1 >> i) & n) {
printf(" %lf", matriz[i]);
}
}
printf("\n");
}
Espero que te sirva, si necesitas este mismo algoritmo para una
longitud arbitraria de elementos d�noslo o prueba a implementar un
contador binario :)
--
�scar Javier Garc�a Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Technical Details
Message-ID:
<hpk1f11l69bg4v00grjcl96t6vtugmvk3d@4ax.com>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!green.octanews.net!news-out.octanews.net!cox.net!news-xfer.cox.net!mainake.escomposlinux.org!antares.escomposlinux.org!cagarruta.escomposlinux.org!appleseed.escomposlinux.org!cernicalo.escomposlinux.org!escomposlinux.org!not-for-mailReferences:
<dcq9mr$r3j$1@nsnmrro2-gest.nuria.telefonica-data.net>Show Full Headers
Complete Article Headers
X-Google-Thread: f86c8,d1999c4db9e210fa X-Google-Attributes: gidf86c8,public X-Google-Language: SPANISH,ASCII Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!green.octanews.net!news-out.octanews.net!cox.net!news-xfer.cox.net!mainake.escomposlinux.org!antares.escomposlinux.org!cagarruta.escomposlinux.org!appleseed.escomposlinux.org!cernicalo.escomposlinux.org!escomposlinux.org!not-for-mail From: Oscar Garcia <redstarQUITARSPAM23@terra.es> Newsgroups: es.comp.os.linux.programacion Subject: Re: Reto de programacion algoritmica Date: Wed, 03 Aug 2005 16:41:25 +0200 Organization: Ecolnet Lines: 65 Message-ID: <hpk1f11l69bg4v00grjcl96t6vtugmvk3d@4ax.com> References: <dcq9mr$r3j$1@nsnmrro2-gest.nuria.telefonica-data.net> NNTP-Posting-Host: 62-14-154-216.inversas.jazztel.es Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Trace: cormoran.emeteo.local 1123080078 19881 62.14.154.216 (3 Aug 2005 14:41:18 GMT) X-Complaints-To: emeteo@escomposlinux.org NNTP-Posting-Date: Wed, 3 Aug 2005 14:41:18 +0000 (UTC) X-Newsreader: Forte Free Agent 2.0/32.652