🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #1844

Re: Reto de programacion algoritmica

#1844
From: Oscar Garcia
Date: Wed, 03 Aug 2005 14:41
65 lines
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-mail
References: <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