Aider moi a résoude cet excercies

youssef311 Messages postés 2 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 20 janvier 2010 - 20 janv. 2010 à 02:04
noname001 Messages postés 21 Date d'inscription dimanche 15 novembre 2009 Statut Membre Dernière intervention 1 mai 2010 - 19 mars 2010 à 18:01
je suis debutant en c++
pouvez vous m'aider a resoudre cet excercice merci d'avance

A un entier n strictement positif on associe n/2 si n est pair et 3n+1 si n est impair. En réappliquant cette transformation à l'entier obtenu, on définit un algorithme dit de Syracuse. On admettra que pour tout entier strictement positif de départ on finisse toujours par arriver à 1.
On demande d'écrire un programme qui, pour une valeur de départ proposée par l'utilisateur, affiche la liste des entiers obtenus jusqu'à 1, ainsi que le nombre de fois qu'il est nécessaire d'appliquer la transformation pour y arriver (ou, si l'on part de 1, pour y revenir).
Voici un exemple de déroulement de cet algorithme :
Valeur de départ (entier strictement positif) ? 12
6 3 10 5 16 8 4 2 1
On doit appliquer 9 fois la transformation avant d'arriver à 1.

5 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
20 janv. 2010 à 11:38
Règlement
Règle 7: quels sont les détails qui te posent problèmes?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
youssef311 Messages postés 2 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 13:41
merci pour votre reponse


j'ai pas arriver a comprendre comment je peux utiliser modulo


je suis encore etudiant et c'est un devoir "homework" pour moi merci pour votre aide
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
20 janv. 2010 à 14:05
l'opérateur modulo (%) te donne le reste de la division.
Si, par exemple, tu divise par 2 (au hasard ) et que tu regarde le reste, tu as soit 0, soit 1:
- 1%2 1, 3%2 1, ...
- 2%2 0, 4%2 0, ...
Tu vois ce que cela te permet de trouver?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
22 févr. 2010 à 13:21
pour plus généralisé au lieu de 3n+1 tu fais an+b a et b premiers.
sinon voila une fonction vite fait :
void Syracuse(int *n)
{
int a=0;
if(n%2==0)
{
a=n/2;
}
else
{
a=3*n+1;// pour l'optimiser écrit direct a=(3*n+1)/2;
}
cout<<"valeur atteinte"<<a<<endl;
printf("valeur atteinte %d",a);
Syracuse(&a)
}
amuse toi. je viens de l'écrire donce a toi de compiler et de faire ton main. boncourage
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
noname001 Messages postés 21 Date d'inscription dimanche 15 novembre 2009 Statut Membre Dernière intervention 1 mai 2010
19 mars 2010 à 18:01
#include 
using namespace std;

int main()
{
    int n,nbr_transformation=0;
    cin >> n; //nbr utilisateur

    while ( n != 1)
    {
          if (n%2 == 0) // Si il est pair
          {
             n /= 2;
          }
          else n = 3*n + 1;  // Impair

          cout << n << " "; // affiche les valeurs
          nbr_transformation++;
    }
    cout << "Nombre de transformations: " << nbr_transformation << endl;
    
    return 0;
}


Comme dit plus haut, le modulo te sert à vérifier si le nbr est pair ou impair. Le reste se fait par une simple boucle et un compteur pour avoir le nombre de modifications faites(donc de tours de boucle)
0
Rejoignez-nous