Aller au menu - Aller au contenu

Projet Euler

C++

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne 008 # Posté le 23/02/2009 à 03:41:02

Ville : Gatineau
Pays : Canada

Bonjour,
Je suis en train de faire le deuxième problème, mais pour une raison que je ne comprends pas, il me donne la mauvaise réponse.
Voici mes fichiers :
Veuillez notez, j'utilise Qt
Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "FenPrincipal.h"

FenPrincipal::FenPrincipal() : QWidget()
{
   // Cela est juste la préparation di widget
 bouton = new QPushButton(this);
    layout = new QHBoxLayout(this);
    layout->addWidget(bouton);
    setLayout(layout);

    // exemple pour m'aider1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55
    total = 0;
    resultat = 0;

    int numeroUn = 1;
    int numeroDeux = 2;
    continuer = true;
    lesReponse.push_back(2); // j'ai déjà 2
    int tmp;
    while ( continuer == true)
    {
        resultat = numeroUn + numeroDeux;
        int tmpPaire = resultat % 2;
        if ( tmpPaire == 0) // si le nombre est un nombre pair
        {
            if ( totalDesNumeros() ) // vérification si ce n'est pas supérieur a 4000000
            {

                lesReponse.push_back(resultat); // si non on le rajoute
            }
        }

        tmp = numeroDeux; // tmp est égal à 2
        numeroDeux = resultat; // NumeroDeux est égal à 3
        numeroUn = tmp; // NumeroUn est égal à 2

    }
    total = 0;
    for ( int i = 0 ; i < lesReponse.size() ; i++)
    {
        total  += lesReponse[i];
    }
    QString string;
    string.setNum(total);
    bouton->setText(string);
}
bool FenPrincipal::totalDesNumeros()
{
total = 0;
int resultatTmp;

resultatTmp = resultat;
    for ( int i = 0 ; i < lesReponse.size() ; i++)
    {
        total  += lesReponse[i];
    }
    total += resultatTmp;
    if ( total >= 4000000)
    {
        continuer = false;
        return false;

    }
    else
    {
        return true;
    }
}

Édité le 23/02/2009 à 03:45:39 par 008

J'espère avoir été clair :p si besoin plus d'information dites-moi le :p
:D Merci d'avance :D

La doc a toujours raison
Merci Pour vos futur réponse
 
Hors ligne Ice_Keese # Posté le 23/02/2009 à 03:47:31
Life is weird (and awesome)
Avatar

Pourquoi utiliser Qt? Un simple programme console ferait l'affaire, non?

Là, tu augmentes la complexité du problème inutilement.

Quelques liens utiles:
SGI STL / H-Deb / C++ FAQ LITE / Mon blogue
 
Hors ligne xxitheworld # Posté le 23/02/2009 à 04:00:22
while(1){printf("ha");}
Avatar

Je vais dire comme Ice, Qt est franchement inutile pour résoudre un problème de Project Euler, car tout ce que l'on veut c'est la réponse.

Ton code n'est pas commenté, et en plus il utilise Qt, donc je ne comprend pas exactement ce qu'il fait mais tu semble calculer la suite au complet de la manière ''classique''. Si tu continue sur project Euler, tu remarquera que la manière 'papier et crayon' (dans ce cas si calculer chaque nouveau nombre en fonction des deux précédents), ne fonctionnera pas, ou sera très lente.

Je te suggère d'utiliser à la place la formule Image utilisateur

Page Wikipedia pour les précisions

(Un peu de recherche aide toujours :D)

avec cette formule, mon programme fait une quinzaine de lignes

int i = 0;
main() { printf("%d ",i); i++; main(); }
 
Hors ligne 008 # Posté le 23/02/2009 à 04:16:22

Ville : Gatineau
Pays : Canada

Citation : Ice_Keese
Pourquoi utiliser Qt? Un simple programme console ferait l'affaire, non?

Là, tu augmentes la complexité du problème inutilement.


Je sais que je ne suis pas obligé de l'utiliser, mais cela ne me dérange pas.

Pour la complexité je ne comprends pas. Utilisé Qt rajoute seulement ça.

Code : C++
1
2
3
4
5
// Cela est juste la préparation di widget
 bouton = new QPushButton(this);
    layout = new QHBoxLayout(this);
    layout->addWidget(bouton);
    setLayout(layout);

Citation : xxitheworld
Je vais dire comme Ice, Qt est franchement inutile pour résoudre un problème de Project Euler, car tout ce que l'on veut c'est la réponse.

Ton code n'est pas commenté, et en plus il utilise Qt, donc je ne comprend pas exactement ce qu'il fait mais tu semble calculer la suite au complet de la manière ''classique''. Si tu continue sur project Euler, tu remarquera que la manière 'papier et crayon' (dans ce cas si calculer chaque nouveau nombre en fonction des deux précédents), ne fonctionnera pas, ou sera très lente.

Je te suggère d'utiliser à la place la formule Image utilisateur

Page Wikipedia pour les précisions

(Un peu de recherche aide toujours :D)

avec cette formule, mon programme fait une quinzaine de lignes

Je vais regarder cela.

J'espère avoir été clair :p si besoin plus d'information dites-moi le :p
:D Merci d'avance :D

La doc a toujours raison
Merci Pour vos futur réponse
 
Hors ligne Goten # Posté le 23/02/2009 à 11:36:32

Utilise std::accumulate() pour faire la somme plutôt que ta boucle
Hors ligne Nanoc # Posté le 23/02/2009 à 11:36:52
Refuseur de tutoriels
Avatar
Validateurs

Ville : Lausanne
Pays : Suisse
études : EPFL

Le problème de cette formule c'est qu'elle n'est pas correcte pour les premiers termes.

Calculer les termes explicitement est beaucoup mieux.

Mes tutos : [C++] Notions avancées (suite du tuto de M@teo21)
Autres : Exercices de C++ pour tous les niveaux ! --- Mots-clés du C++
 
Hors ligne 008 # Posté le 24/02/2009 à 03:17:40

Ville : Gatineau
Pays : Canada

Voici les modifications que j'ai faites sur mon fichier en considérant la fonction Code : C++
1
std::accumulate()

et en considérant la suite comme telle :
0 - 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21

Voici le résultat:
Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "FenPrincipal.h"
#include <numeric>
FenPrincipal::FenPrincipal() : QWidget()
{
    bouton = new QPushButton(this);
    layout = new QHBoxLayout(this);
    layout->addWidget(bouton);
    setLayout(layout);

    // 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55
    total = 0;
    resultat = 0;

    int numeroUn = 1;
    int numeroDeux = 2;
    continuer = true;
    lesReponse.push_back(2);
    int tmp;


    while ( continuer == true)
    {
        resultat = numeroUn + numeroDeux;
        int tmpPaire = resultat % 2;
        if ( tmpPaire == 0)
        {
            if ( totalDesNumeros() )
            {

                lesReponse.push_back(resultat);
            }
        }

        tmp = numeroDeux; // TMP = 2
        numeroDeux = resultat; // NUMÉROdEUX = 3
        numeroUn = tmp; // NUMEROUN = 2

    }

total = std::accumulate(lesReponse.begin(), lesReponse.end(), 0);
QString string;
    string.setNum(total);
    bouton->setText(string);
}
bool FenPrincipal::totalDesNumeros()
{

int resultatTmp;

resultatTmp = resultat;
    total = std::accumulate(lesReponse.begin(), lesReponse.end(), 0);
    total += resultatTmp;
    if ( total >= 4000000)
    {
        continuer = false;
        return false;
    }
    else
    {
        return true;
    }
}

Mais ce n'est pas la bonne réponse.
Édité le 24/02/2009 à 03:29:33 par 008

J'espère avoir été clair :p si besoin plus d'information dites-moi le :p
:D Merci d'avance :D

La doc a toujours raison
Merci Pour vos futur réponse
 
Hors ligne El roux # Posté le 24/02/2009 à 20:02:54
Mom's secret for white theet?
Avatar

Petite question pour ceux qui le savent, je commence project euler moi aussi :
On veut la somme de tous les termes qui n,exède pas 4 millions où le terme le plus proche de 4 millions?

Je rêve d'un programme de 100 Mo qui se résume à 100 lignes de main()...
 
Hors ligne Nanoc # Posté le 24/02/2009 à 20:08:51
Refuseur de tutoriels
Avatar
Validateurs

Ville : Lausanne
Pays : Suisse
études : EPFL

littéralement:

la somme des termes pairs "qui n'excèdent pas" 4'000'000.

Mes tutos : [C++] Notions avancées (suite du tuto de M@teo21)
Autres : Exercices de C++ pour tous les niveaux ! --- Mots-clés du C++
 
Hors ligne El roux # Posté le 24/02/2009 à 22:15:41
Mom's secret for white theet?
Avatar

Des termes pairs o_O ??
even-valued terms veux dire pairs?
Est-ce que c'est la somme qui ne doit pas excèder 4 millions?

Je rêve d'un programme de 100 Mo qui se résume à 100 lignes de main()...
 
Hors ligne cerium50 # Posté le 24/02/2009 à 22:47:31
1 23 / 4 5 * 6 - 78 9 - * *
Avatar

La somme de tout les termes pairs qui sont contenus dans la suite sur l'intervalle [1, 4000000], donc la somme de tout les termes pairs de la suite entre 1 et 4000000.

RTFM (c'est valable pour tout...)

Projet Euler : 130 / 262.

CSS-Tricks / David Walsh / Douglas Crockford / James Padolsey / Jay Salvat / Javascript / jQuery / jQuery for Designers / JSLint / Mootools / PHP / Validator : HTML & CSS
 
Hors ligne El roux # Posté le 24/02/2009 à 23:18:08
Mom's secret for white theet?
Avatar

ok merci :)
Haa tiens la réponse c'est 4 :-° ...!
Édité le 24/02/2009 à 23:18:38 par El roux

Je rêve d'un programme de 100 Mo qui se résume à 100 lignes de main()...
 
Hors ligne Goten # Posté le 24/02/2009 à 23:18:35

Citation : El roux
Des termes pairs o_O ??
even-valued terms veux dire pairs?
Est-ce que c'est la somme qui ne doit pas excèder 4 millions?


even = pair. Et non c'est les termes inférieur à 4 millions.
Hors ligne candide # Posté le 24/02/2009 à 23:27:26
"In C ode we trust"
Avatar

Citation : 008

Je suis en train de faire le deuxième problème,


cf. Projet Euler, exo 2, forum C


Citation : 008

Veuillez notez, j'utilise Qt

:o :o :o :o :o


 
Hors ligne 008 # Posté le 25/02/2009 à 02:57:30

Ville : Gatineau
Pays : Canada

Je viens de comprendre mon erreur.
Erreur très bête en passant.
Code : C++
1
2
3
4
5
resultatTmp = resultat;
    total = std::accumulate(lesReponse.begin(), lesReponse.end(), 0);
    total += resultatTmp;
    if ( total >= 4000000)
    {

Ici je calcule si le total n'excède pas 4 000 000 alors que je dois vérifier si le résultat n'excède pas 4 000 000.


J'espère avoir été clair :p si besoin plus d'information dites-moi le :p
:D Merci d'avance :D

La doc a toujours raison
Merci Pour vos futur réponse
 
Hors ligne Mikechaos # Posté le 25/02/2009 à 03:25:15
Zah
Avatar

études : Cégep Lionel-Groulx

J'ai rien dit.
Édité le 25/02/2009 à 03:27:01 par Mikechaos

Citation : Einstein
Il y a deux choses d'infinies.
-L'univers
-La bêtise humaine
Bien que pour l'univers, rien n'est encore sûr.

Citation : Socrate
Le premier pas vers la connaissance,
c'est d'admettre qu'on ne sait rien
 

Retour au forum "Langage C++" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx