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
| #include <stdio.h>
#include <stdlib.h>
#define LONGUEUR 1024
int *syracuse(int n, int *size) {
int *suite = malloc(LONGUEUR * sizeof *suite);
int i = 0;
while (n != 1) {
n = (n & 1) ? (3*n + 1) : (n >> 1);
suite[i++] = n;
}
*size = i;
return suite;
}
int main(void) {
int nb, i, j, size;
printf("Saisir un entier positif : ");
scanf("%d",&nb);
printf("\n");
printf("1 : 1\n");
for (i=2; i <= nb; i++) {
printf("%d : ", i);
size = 0;
int *a = syracuse(i, &size);
for (j=0; j < size; j++) {
printf("%d ", *(a + j));
}
printf("\n");
}
return 0;
}
# Test
Saisir un entier positif : 16
1 : 1
2 : 1
3 : 10 5 16 8 4 2 1
4 : 2 1
5 : 16 8 4 2 1
6 : 3 10 5 16 8 4 2 1
7 : 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
8 : 4 2 1
9 : 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
10 : 5 16 8 4 2 1
11 : 34 17 52 26 13 40 20 10 5 16 8 4 2 1
12 : 6 3 10 5 16 8 4 2 1
13 : 40 20 10 5 16 8 4 2 1
14 : 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
15 : 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
16 : 8 4 2 1 |
Partager