La conjetura de Collatz diu que qualsevol nombre natural més gran que 0 sempre acabarà convertint-se en 1 seguint les següents regles: si és parell, es divideix entre 2. En cas de ser senar es multiplica per 3 i s’hi suma 1. Quan s’arriba a 1, entra en un bucle 1 - 2 - 4 - 1 ...
Si anomenem com a ’grau’ el nombre de cops que operem el número, feu un programa que llegeixi una sèrie de números, la transformi en una cua i mitjançant una funció anomenada ’mayorcollatz’, calculi quin número té el mayor ordre i quin és aquest ordre. Podeu utilitzar una altra funció anomenada ’collatz’ per calcular l’ordre de cada número. En cas d’empat, la sortida serà el nombre més gran.
Implementeu dins del vostre programa, llavors, les funcions següents:
// Pre: Una cua de números més grans que 1. // Post: Escriu el número d'ordre de Collatz més gran i l'ordre del mateix. // void mayor_collatz (queue <int> cua) { // } // Pre: Un enter iniciat a 0 que serà el comptador de l'ordre i un número major que 1. // Post: Retorna l'ordre de Collatz del propi número. // int collatz (int i, int contador) { // }
Entrada
L’entrada del programa és una seqüencia de naturals majors o iguals que 1 que heu de convertir a una cua:
1 4 9 7 5
Sortida
La sortida ha d’indicar quin es el nombre d’ordre més alt i quin és el seu ordre seguint la següent estructura:
El numero que més cops opera és 9 amb 19 cops.
En cas d’empat, la sortida serà el nombre més gran.
Input
1 4 9 7 5
Output
El numero que més cops opera és 9 amb 19 cops.
Input
128 20 17 3
Output
El numero que més cops opera és 17 amb 12 cops.
Input
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Output
El numero que més cops opera és 9 amb 19 cops.
Input
4 12 8 3 17
Output
El numero que més cops opera és 17 amb 12 cops.
Input
5 32 4 8
Output
El numero que més cops opera és 32 amb 5 cops.