Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'algorithme

multiple de 3 et 5

Sujet résolu
25 mars 2009 à 21:58:12

Bonsoir,
pour résoudre le problème 1 d'Euler, j'ai tenté une autre méthde que la force brute, mais mon programme me donne un mauvais résultat, et je ne trouve pas pourquoi. Voici donc mon programme, en esperant que vous pourriez m'aider.
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int sum = 0, i = 0;
    for(i = 3; i < 1000 ; i = i+3)
    {
        sum = sum+i;
        printf("%d ... %d\n", sum, i);
    }
    for(i = 5; i < 1000 ; i = i+5)
    {
        sum = sum+i;
        printf("%d ... %d\n", sum, i);
    }

    printf("%d", sum);

    return 0;
}


Merci d'avance,
Bonne soirée ;)
  • Partager sur Facebook
  • Partager sur Twitter
25 mars 2009 à 22:07:04

Je n'ai pas de reponse puisque je ne connais pas du tout le premier problème d'Euler.
En cherchant sur google on trouve le problème du cavalier d'Euler mais au vu de ton algo je doute que tu parle de cela.
Tu pourrais expliquer (ou donner un lien) expliquant en quoi consiste le problème d'euler?
  • Partager sur Facebook
  • Partager sur Twitter
25 mars 2009 à 22:08:40

(project euler) : Le problème consiste à trouver la somme de tous les entiers multiple de 3 ou 5 inférieur à 1000.
  • Partager sur Facebook
  • Partager sur Twitter
25 mars 2009 à 22:32:30

Utilise des boucles if en plus de tes for
  • Partager sur Facebook
  • Partager sur Twitter
25 mars 2009 à 22:34:33

Bon on cherche la somme (si quelqu'un sais comment ecrire des maths sur le sdz je suis prenneur). des nombres multiple de 3 ou 5 < 1000.
On vas donc ajouter 3+5+6+9+10+12+15+???

Si je marque Trois ? c'est que la difficulté reside ici. Il s'agit de ne pas compter deux fois les nombres multiple de 3 et 5 < 1000.
RESULTAT = Somme          3k    +   Somme         5k     -   Somme     15k
           de k =0 a 333            de k=0 a 199            k=0 a 66

Dans le raisonnement c'est ça. voila pour ta reponse. L'algo est fait te reste a le coder. :)
Bon... un moyen d'ecrire des maths sur le sdz maintenant. x)

EDIT :Lien vers le wiki montrant la formule mathématique que j'ai si mal expliquer ici. Y'a aussi ta solution en différent language. ;)
  • Partager sur Facebook
  • Partager sur Twitter
25 mars 2009 à 22:47:43

Voici ma façon:
/*
 * Problem 1:
 * If we list all the natural numbers below 10 that are multiples of 3 or 5,
 * we get 3, 5, 6 and 9. The sum of these multiples is 23.
 *
 * Find the sum of all the multiples of 3 or 5 below 1000.
 */

#include <stdlib.h>
#include <stdio.h>

#define     LIMIT     1000

int main(void) {
    /* Init. */
    unsigned int i = 0;
    unsigned int sum = 0;

    /* Operate. */
    for(i = 0; i < LIMIT; i++) {
        if(i % 3 == 0 || i % 5 == 0) {
            sum += i;
        }
    }

    printf("%i\n", sum);

    /* Conclude. */
    return EXIT_SUCCESS;
}
  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2009 à 12:41:49

Je connais la force brute mais elle était pas intéressante. Hier, même avec le corrigé du site, je comprenais pas mon erreur, et pourtant j'avais vu l'algo que tu as cité sye plein de fois avant de faire mon programme, à croire que hier je devais être fatigué et mal voyant :p
Merci de vos réponses ;)
  • Partager sur Facebook
  • Partager sur Twitter
3 septembre 2021 à 22:27:20

Voila  astuce trop simple!

a, b: entier;

r: entier;

Tanque(a>=b) faire

a=a-b;

r++;

FinTanque

  • Partager sur Facebook
  • Partager sur Twitter
3 septembre 2021 à 22:51:19

@LOKMANESABBAH1 Bonsoir, merci de ne pas déterrer d'ancien sujet résolu.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter