Sylvain Togni a écrit :
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
>
OK, la solution triviale
> 0 3 8 8
> 6 4 0 2
> 7 9 5 4
> 9 2 1 5
>
> 0 6 7 9
> 6 4 0 2
> 7 0 8 1
> 9 2 1 5
>
La dernière solution est amusante, on obtient une matrice symétrique.
> Mais quel rapport avec le C ?
>
Il s'agit de proposer du code C résolvant la question et de discuter de
ce code : respect de la norme, portabilité, variations possibles sur le
code, optimisations diverses, avantage à écrire ce code en C plutôt que
dans un autre langage, etc.
Bon, je vais donner l'exemple :
/* 97.c */
#include <stdio.h>
#define NB_CHIFFRES 4
#define BASE 10
void afficher(int t[NB_CHIFFRES][NB_CHIFFRES])
{
int lig, col;
for (lig = 0; lig < NB_CHIFFRES; lig++)
{
for (col = 0; col < NB_CHIFFRES; col++)
printf("%d", t[lig][col]);
printf("n");
}
printf("nn");
}
void chiffres(int *t, int x)
{
int i;
int q;
for (i = 0; i < NB_CHIFFRES; i++)
{
q = x / BASE;
t[NB_CHIFFRES - i - 1] = x - BASE * q;
x = q;
}
}
int solve(void)
{
#define N 97
#define BORNE 10*10*10
int a, b, c, d;
int t[NB_CHIFFRES][NB_CHIFFRES];
for (a = 0; a < BORNE; a += N)
for (b = 0; b < BORNE; b += N)
for (c = 0; c < BORNE; c += N)
for (d = 0; d < BORNE; d += N)
{
int col = 0;
chiffres(&t[0][0], a);
if (t[0][0])
goto fin;
chiffres(&t[1][0], b);
if (t[1][2])
continue;
chiffres(&t[2][0], c);
chiffres(&t[3][0], d);
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
col++;
if (col == NB_CHIFFRES)
afficher(t);
}
fin:
return 0;
}
Sylvain Togni a écrit :
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
>
OK, la solution triviale
> 0 3 8 8
> 6 4 0 2
> 7 9 5 4
> 9 2 1 5
>
> 0 6 7 9
> 6 4 0 2
> 7 0 8 1
> 9 2 1 5
>
La dernière solution est amusante, on obtient une matrice symétrique.
> Mais quel rapport avec le C ?
>
Il s'agit de proposer du code C résolvant la question et de discuter de
ce code : respect de la norme, portabilité, variations possibles sur le
code, optimisations diverses, avantage à écrire ce code en C plutôt que
dans un autre langage, etc.
Bon, je vais donner l'exemple :
/* 97.c */
#include <stdio.h>
#define NB_CHIFFRES 4
#define BASE 10
void afficher(int t[NB_CHIFFRES][NB_CHIFFRES])
{
int lig, col;
for (lig = 0; lig < NB_CHIFFRES; lig++)
{
for (col = 0; col < NB_CHIFFRES; col++)
printf("%d", t[lig][col]);
printf("n");
}
printf("nn");
}
void chiffres(int *t, int x)
{
int i;
int q;
for (i = 0; i < NB_CHIFFRES; i++)
{
q = x / BASE;
t[NB_CHIFFRES - i - 1] = x - BASE * q;
x = q;
}
}
int solve(void)
{
#define N 97
#define BORNE 10*10*10
int a, b, c, d;
int t[NB_CHIFFRES][NB_CHIFFRES];
for (a = 0; a < BORNE; a += N)
for (b = 0; b < BORNE; b += N)
for (c = 0; c < BORNE; c += N)
for (d = 0; d < BORNE; d += N)
{
int col = 0;
chiffres(&t[0][0], a);
if (t[0][0])
goto fin;
chiffres(&t[1][0], b);
if (t[1][2])
continue;
chiffres(&t[2][0], c);
chiffres(&t[3][0], d);
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
col++;
if (col == NB_CHIFFRES)
afficher(t);
}
fin:
return 0;
}
Sylvain Togni a écrit :
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
>
OK, la solution triviale
> 0 3 8 8
> 6 4 0 2
> 7 9 5 4
> 9 2 1 5
>
> 0 6 7 9
> 6 4 0 2
> 7 0 8 1
> 9 2 1 5
>
La dernière solution est amusante, on obtient une matrice symétrique.
> Mais quel rapport avec le C ?
>
Il s'agit de proposer du code C résolvant la question et de discuter de
ce code : respect de la norme, portabilité, variations possibles sur le
code, optimisations diverses, avantage à écrire ce code en C plutôt que
dans un autre langage, etc.
Bon, je vais donner l'exemple :
/* 97.c */
#include <stdio.h>
#define NB_CHIFFRES 4
#define BASE 10
void afficher(int t[NB_CHIFFRES][NB_CHIFFRES])
{
int lig, col;
for (lig = 0; lig < NB_CHIFFRES; lig++)
{
for (col = 0; col < NB_CHIFFRES; col++)
printf("%d", t[lig][col]);
printf("n");
}
printf("nn");
}
void chiffres(int *t, int x)
{
int i;
int q;
for (i = 0; i < NB_CHIFFRES; i++)
{
q = x / BASE;
t[NB_CHIFFRES - i - 1] = x - BASE * q;
x = q;
}
}
int solve(void)
{
#define N 97
#define BORNE 10*10*10
int a, b, c, d;
int t[NB_CHIFFRES][NB_CHIFFRES];
for (a = 0; a < BORNE; a += N)
for (b = 0; b < BORNE; b += N)
for (c = 0; c < BORNE; c += N)
for (d = 0; d < BORNE; d += N)
{
int col = 0;
chiffres(&t[0][0], a);
if (t[0][0])
goto fin;
chiffres(&t[1][0], b);
if (t[1][2])
continue;
chiffres(&t[2][0], c);
chiffres(&t[3][0], d);
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
col++;
if (col == NB_CHIFFRES)
afficher(t);
}
fin:
return 0;
}
candide a écrit :
> Il marche pas : c'est-à-dire ? il compile pas ou t'as une erreur à
> l'exécution ?
Il ne trouve aucune solution.
Mais en remplaçant
#define BORNE 10*10*10
par
#define BORNE 10*10*10*10
et
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
par
while (col < 4 && !((t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N))
il fonctionne et ne met que 0.5s.
candide a écrit :
> Il marche pas : c'est-à-dire ? il compile pas ou t'as une erreur à
> l'exécution ?
Il ne trouve aucune solution.
Mais en remplaçant
#define BORNE 10*10*10
par
#define BORNE 10*10*10*10
et
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
par
while (col < 4 && !((t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N))
il fonctionne et ne met que 0.5s.
candide a écrit :
> Il marche pas : c'est-à-dire ? il compile pas ou t'as une erreur à
> l'exécution ?
Il ne trouve aucune solution.
Mais en remplaçant
#define BORNE 10*10*10
par
#define BORNE 10*10*10*10
et
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
par
while (col < 4 && !((t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N))
il fonctionne et ne met que 0.5s.
Sylvain Togni a écrit :0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
OK, la solution triviale0 3 8 8
6 4 0 2
7 9 5 4
9 2 1 5
0 6 7 9
6 4 0 2
7 0 8 1
9 2 1 5
La dernière solution est amusante, on obtient une matrice symétrique.Mais quel rapport avec le C ?
Il s'agit de proposer du code C résolvant la question et de discuter de
ce code : respect de la norme, portabilité, variations possibles sur le
code, optimisations diverses, avantage à écrire ce code en C plutôt que
dans un autre langage, etc.
Bon, je vais donner l'exemple :
/* 97.c */
#include <stdio.h>
#define NB_CHIFFRES 4
#define BASE 10
void afficher(int t[NB_CHIFFRES][NB_CHIFFRES])
{
int lig, col;
for (lig = 0; lig < NB_CHIFFRES; lig++)
{
for (col = 0; col < NB_CHIFFRES; col++)
printf("%d", t[lig][col]);
printf("n");
}
printf("nn");
}
void chiffres(int *t, int x)
{
int i;
int q;
for (i = 0; i < NB_CHIFFRES; i++)
{
q = x / BASE;
t[NB_CHIFFRES - i - 1] = x - BASE * q;
x = q;
}
}
int solve(void)
{
#define N 97
#define BORNE 10*10*10
int a, b, c, d;
int t[NB_CHIFFRES][NB_CHIFFRES];
for (a = 0; a < BORNE; a += N)
for (b = 0; b < BORNE; b += N)
for (c = 0; c < BORNE; c += N)
for (d = 0; d < BORNE; d += N)
{
int col = 0;
chiffres(&t[0][0], a);
if (t[0][0])
goto fin;
chiffres(&t[1][0], b);
if (t[1][2])
continue;
chiffres(&t[2][0], c);
chiffres(&t[3][0], d);
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
col++;
if (col == NB_CHIFFRES)
afficher(t);
}
fin:
return 0;
}
int main(void)
{
solve();
return 0;
}
/* Fin de 97.c */
$time ./x
0000
0000
0000
0000
0388
6402
7954
9215
0679
6402
7081
9215
real 0m6.411s
user 0m5.452s
sys 0m0.048s
Sylvain Togni a écrit :
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
OK, la solution triviale
0 3 8 8
6 4 0 2
7 9 5 4
9 2 1 5
0 6 7 9
6 4 0 2
7 0 8 1
9 2 1 5
La dernière solution est amusante, on obtient une matrice symétrique.
Mais quel rapport avec le C ?
Il s'agit de proposer du code C résolvant la question et de discuter de
ce code : respect de la norme, portabilité, variations possibles sur le
code, optimisations diverses, avantage à écrire ce code en C plutôt que
dans un autre langage, etc.
Bon, je vais donner l'exemple :
/* 97.c */
#include <stdio.h>
#define NB_CHIFFRES 4
#define BASE 10
void afficher(int t[NB_CHIFFRES][NB_CHIFFRES])
{
int lig, col;
for (lig = 0; lig < NB_CHIFFRES; lig++)
{
for (col = 0; col < NB_CHIFFRES; col++)
printf("%d", t[lig][col]);
printf("n");
}
printf("nn");
}
void chiffres(int *t, int x)
{
int i;
int q;
for (i = 0; i < NB_CHIFFRES; i++)
{
q = x / BASE;
t[NB_CHIFFRES - i - 1] = x - BASE * q;
x = q;
}
}
int solve(void)
{
#define N 97
#define BORNE 10*10*10
int a, b, c, d;
int t[NB_CHIFFRES][NB_CHIFFRES];
for (a = 0; a < BORNE; a += N)
for (b = 0; b < BORNE; b += N)
for (c = 0; c < BORNE; c += N)
for (d = 0; d < BORNE; d += N)
{
int col = 0;
chiffres(&t[0][0], a);
if (t[0][0])
goto fin;
chiffres(&t[1][0], b);
if (t[1][2])
continue;
chiffres(&t[2][0], c);
chiffres(&t[3][0], d);
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
col++;
if (col == NB_CHIFFRES)
afficher(t);
}
fin:
return 0;
}
int main(void)
{
solve();
return 0;
}
/* Fin de 97.c */
$time ./x
0000
0000
0000
0000
0388
6402
7954
9215
0679
6402
7081
9215
real 0m6.411s
user 0m5.452s
sys 0m0.048s
Sylvain Togni a écrit :0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
OK, la solution triviale0 3 8 8
6 4 0 2
7 9 5 4
9 2 1 5
0 6 7 9
6 4 0 2
7 0 8 1
9 2 1 5
La dernière solution est amusante, on obtient une matrice symétrique.Mais quel rapport avec le C ?
Il s'agit de proposer du code C résolvant la question et de discuter de
ce code : respect de la norme, portabilité, variations possibles sur le
code, optimisations diverses, avantage à écrire ce code en C plutôt que
dans un autre langage, etc.
Bon, je vais donner l'exemple :
/* 97.c */
#include <stdio.h>
#define NB_CHIFFRES 4
#define BASE 10
void afficher(int t[NB_CHIFFRES][NB_CHIFFRES])
{
int lig, col;
for (lig = 0; lig < NB_CHIFFRES; lig++)
{
for (col = 0; col < NB_CHIFFRES; col++)
printf("%d", t[lig][col]);
printf("n");
}
printf("nn");
}
void chiffres(int *t, int x)
{
int i;
int q;
for (i = 0; i < NB_CHIFFRES; i++)
{
q = x / BASE;
t[NB_CHIFFRES - i - 1] = x - BASE * q;
x = q;
}
}
int solve(void)
{
#define N 97
#define BORNE 10*10*10
int a, b, c, d;
int t[NB_CHIFFRES][NB_CHIFFRES];
for (a = 0; a < BORNE; a += N)
for (b = 0; b < BORNE; b += N)
for (c = 0; c < BORNE; c += N)
for (d = 0; d < BORNE; d += N)
{
int col = 0;
chiffres(&t[0][0], a);
if (t[0][0])
goto fin;
chiffres(&t[1][0], b);
if (t[1][2])
continue;
chiffres(&t[2][0], c);
chiffres(&t[3][0], d);
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000 % N))
col++;
if (col == NB_CHIFFRES)
afficher(t);
}
fin:
return 0;
}
int main(void)
{
solve();
return 0;
}
/* Fin de 97.c */
$time ./x
0000
0000
0000
0000
0388
6402
7954
9215
0679
6402
7081
9215
real 0m6.411s
user 0m5.452s
sys 0m0.048s
Avec mes corrections, j'ai bien le bon resultat et un temps d'execution de
$ time ./97
real 0m1.162s
user 0m1.000s
sys 0m0.000s
Version brutale:
$ time ./fsq97
real 0m0.241s
user 0m0.061s
sys 0m0.015s
même algorithme, mais implementation plus simple => 5 fois plus rapide.
on peut obtenir les 181 solutions generales en commentant les deux tests.
Avec mes corrections, j'ai bien le bon resultat et un temps d'execution de
$ time ./97
real 0m1.162s
user 0m1.000s
sys 0m0.000s
Version brutale:
$ time ./fsq97
real 0m0.241s
user 0m0.061s
sys 0m0.015s
même algorithme, mais implementation plus simple => 5 fois plus rapide.
on peut obtenir les 181 solutions generales en commentant les deux tests.
Avec mes corrections, j'ai bien le bon resultat et un temps d'execution de
$ time ./97
real 0m1.162s
user 0m1.000s
sys 0m0.000s
Version brutale:
$ time ./fsq97
real 0m0.241s
user 0m0.061s
sys 0m0.015s
même algorithme, mais implementation plus simple => 5 fois plus rapide.
on peut obtenir les 181 solutions generales en commentant les deux tests.
#define BORNE 10*10*10
BORNE devrait etre 10000
Tu peux sortir cela des boucles sur b, c et d
(...)
tu peux sortir cela des boucles sur c et dchiffres(&t[2][0], c);
tu peux sortir cela de la boucle sur d
au moins deux problemes ici:
* %N doit se faire sur tout le calcul
* il faut aussi verifier que col n'a pas de depassement.
tu pourrais aller encore un peu plus vite en remarquant qu'il y a tres peu
de solutions pour c et d, donc travailler sur les colonnes apres les deux
premieres lignes (il y a au au minimum 1 et au maximum 2 solutions par
colonne) et verifier apres que les 2 dernieres lignes sont valides.
(...) Il doit y avoir dedans une ou deux
techniques qui pourraient t'interesser (comme l'utilisation de la
recursivite pour avoir un nombre de boucles imbriquees variables).
#define BORNE 10*10*10
BORNE devrait etre 10000
Tu peux sortir cela des boucles sur b, c et d
(...)
tu peux sortir cela des boucles sur c et d
chiffres(&t[2][0], c);
tu peux sortir cela de la boucle sur d
au moins deux problemes ici:
* %N doit se faire sur tout le calcul
* il faut aussi verifier que col n'a pas de depassement.
tu pourrais aller encore un peu plus vite en remarquant qu'il y a tres peu
de solutions pour c et d, donc travailler sur les colonnes apres les deux
premieres lignes (il y a au au minimum 1 et au maximum 2 solutions par
colonne) et verifier apres que les 2 dernieres lignes sont valides.
(...) Il doit y avoir dedans une ou deux
techniques qui pourraient t'interesser (comme l'utilisation de la
recursivite pour avoir un nombre de boucles imbriquees variables).
#define BORNE 10*10*10
BORNE devrait etre 10000
Tu peux sortir cela des boucles sur b, c et d
(...)
tu peux sortir cela des boucles sur c et dchiffres(&t[2][0], c);
tu peux sortir cela de la boucle sur d
au moins deux problemes ici:
* %N doit se faire sur tout le calcul
* il faut aussi verifier que col n'a pas de depassement.
tu pourrais aller encore un peu plus vite en remarquant qu'il y a tres peu
de solutions pour c et d, donc travailler sur les colonnes apres les deux
premieres lignes (il y a au au minimum 1 et au maximum 2 solutions par
colonne) et verifier apres que les 2 dernieres lignes sont valides.
(...) Il doit y avoir dedans une ou deux
techniques qui pourraient t'interesser (comme l'utilisation de la
recursivite pour avoir un nombre de boucles imbriquees variables).
Cette boucle est completement boguée :
Avec mes corrections, j'ai bien le bon resultat et un temps d'execution de
1.162s
Mais il ne sert a rien d'utiliser des tableaux et de laisser croire que
l'algorithme est generique si on change la valeur de NB_CHIFFRES... il
faudrait alors changer aussi le nombre de boucles for(;;) et le test des
colonnes.
Voici une implementation plus brutale:
#include <stdio.h>
#define N 97
int main(void) {
int a, b, c, d;
for (a = 0; a < 10000; a += N) {
if (a / 1000 % 10 != 0) continue; /* 0XXX */
for (b = 0; b < 10000; b += N) {
if (b / 10 % 10 != 0) continue; /* XX0X */
for (c = 0; c < 10000; c += N) {
for (d = 0; d < 10000; d += N) {
#define T(p) (a/p % 10 * 1000 + b/p % 10 * 100 + c/p % 10 * 10 + d/p % 10)
if (T(1) % N == 0 && T(10) % N == 0
&& T(100) % N == 0 && T(1000) % N == 0)
printf("%04dn%04dn%04dn%04dnn", a, b, c, d);
}
}
}
}
return 0;
}
$ time ./fsq97
0000
0000
0000
0000
0388
6402
7954
9215
0679
6402
7081
9215
real 0m0.241s
user 0m0.061s
sys 0m0.015s
Cette boucle est completement boguée :
Avec mes corrections, j'ai bien le bon resultat et un temps d'execution de
1.162s
Mais il ne sert a rien d'utiliser des tableaux et de laisser croire que
l'algorithme est generique si on change la valeur de NB_CHIFFRES... il
faudrait alors changer aussi le nombre de boucles for(;;) et le test des
colonnes.
Voici une implementation plus brutale:
#include <stdio.h>
#define N 97
int main(void) {
int a, b, c, d;
for (a = 0; a < 10000; a += N) {
if (a / 1000 % 10 != 0) continue; /* 0XXX */
for (b = 0; b < 10000; b += N) {
if (b / 10 % 10 != 0) continue; /* XX0X */
for (c = 0; c < 10000; c += N) {
for (d = 0; d < 10000; d += N) {
#define T(p) (a/p % 10 * 1000 + b/p % 10 * 100 + c/p % 10 * 10 + d/p % 10)
if (T(1) % N == 0 && T(10) % N == 0
&& T(100) % N == 0 && T(1000) % N == 0)
printf("%04dn%04dn%04dn%04dnn", a, b, c, d);
}
}
}
}
return 0;
}
$ time ./fsq97
0000
0000
0000
0000
0388
6402
7954
9215
0679
6402
7081
9215
real 0m0.241s
user 0m0.061s
sys 0m0.015s
Cette boucle est completement boguée :
Avec mes corrections, j'ai bien le bon resultat et un temps d'execution de
1.162s
Mais il ne sert a rien d'utiliser des tableaux et de laisser croire que
l'algorithme est generique si on change la valeur de NB_CHIFFRES... il
faudrait alors changer aussi le nombre de boucles for(;;) et le test des
colonnes.
Voici une implementation plus brutale:
#include <stdio.h>
#define N 97
int main(void) {
int a, b, c, d;
for (a = 0; a < 10000; a += N) {
if (a / 1000 % 10 != 0) continue; /* 0XXX */
for (b = 0; b < 10000; b += N) {
if (b / 10 % 10 != 0) continue; /* XX0X */
for (c = 0; c < 10000; c += N) {
for (d = 0; d < 10000; d += N) {
#define T(p) (a/p % 10 * 1000 + b/p % 10 * 100 + c/p % 10 * 10 + d/p % 10)
if (T(1) % N == 0 && T(10) % N == 0
&& T(100) % N == 0 && T(1000) % N == 0)
printf("%04dn%04dn%04dn%04dnn", a, b, c, d);
}
}
}
}
return 0;
}
$ time ./fsq97
0000
0000
0000
0000
0388
6402
7954
9215
0679
6402
7081
9215
real 0m0.241s
user 0m0.061s
sys 0m0.015s
au moins deux problemes ici:
* %N doit se faire sur tout le calcul
Pas compris, de quel calcul tu parles ?
while (col < 4
&& (t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N == 0)
Surtout ce que je note dans ton code, ce sont les points suivants
(signalés dans le désordre) :
*) emploi de puts au lieu de printf (vitesse d'exécution ? moins de
lettres à écrire dans le code !!?)
*) emploi d'un tableau unidimesionnel et un stride plutôt que qu'un
tableau 2D (jamais vu utiliser ce terme de stride)
*) for (i = a; i-- > b; ) : j'avais jamais vu une expression de contrôle
d'un boucle for qui avait cette tête
*) je trouve que la multiplicité des assert nuisent à la lisibilité
(normal je n'ai pas l'habitude de les utiliser)
au moins deux problemes ici:
* %N doit se faire sur tout le calcul
Pas compris, de quel calcul tu parles ?
while (col < 4
&& (t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N == 0)
Surtout ce que je note dans ton code, ce sont les points suivants
(signalés dans le désordre) :
*) emploi de puts au lieu de printf (vitesse d'exécution ? moins de
lettres à écrire dans le code !!?)
*) emploi d'un tableau unidimesionnel et un stride plutôt que qu'un
tableau 2D (jamais vu utiliser ce terme de stride)
*) for (i = a; i-- > b; ) : j'avais jamais vu une expression de contrôle
d'un boucle for qui avait cette tête
*) je trouve que la multiplicité des assert nuisent à la lisibilité
(normal je n'ai pas l'habitude de les utiliser)
au moins deux problemes ici:
* %N doit se faire sur tout le calcul
Pas compris, de quel calcul tu parles ?
while (col < 4
&& (t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N == 0)
Surtout ce que je note dans ton code, ce sont les points suivants
(signalés dans le désordre) :
*) emploi de puts au lieu de printf (vitesse d'exécution ? moins de
lettres à écrire dans le code !!?)
*) emploi d'un tableau unidimesionnel et un stride plutôt que qu'un
tableau 2D (jamais vu utiliser ce terme de stride)
*) for (i = a; i-- > b; ) : j'avais jamais vu une expression de contrôle
d'un boucle for qui avait cette tête
*) je trouve que la multiplicité des assert nuisent à la lisibilité
(normal je n'ai pas l'habitude de les utiliser)
*) emploi d'un tableau unidimesionnel et un stride plutôt que qu'un
tableau 2D (jamais vu utiliser ce terme de stride)
*) emploi d'un tableau unidimesionnel et un stride plutôt que qu'un
tableau 2D (jamais vu utiliser ce terme de stride)
*) emploi d'un tableau unidimesionnel et un stride plutôt que qu'un
tableau 2D (jamais vu utiliser ce terme de stride)
Tous les prétextes sont bons pour faire du C : compléter la grille 4x 4
ci-dessous par des chiffres décimaux (deux zéros sont déjà plac és) en
sorte que tous les nombres de 4 chiffres (lus de la gauche vers la
droite ou de haut en bas) qui apparaissent soient des multiples de 97 :
0XXX
XX0X
XXXX
XXXX
Il n'y a pas que la solution triviale. Bon amusement.
Tous les prétextes sont bons pour faire du C : compléter la grille 4x 4
ci-dessous par des chiffres décimaux (deux zéros sont déjà plac és) en
sorte que tous les nombres de 4 chiffres (lus de la gauche vers la
droite ou de haut en bas) qui apparaissent soient des multiples de 97 :
0XXX
XX0X
XXXX
XXXX
Il n'y a pas que la solution triviale. Bon amusement.
Tous les prétextes sont bons pour faire du C : compléter la grille 4x 4
ci-dessous par des chiffres décimaux (deux zéros sont déjà plac és) en
sorte que tous les nombres de 4 chiffres (lus de la gauche vers la
droite ou de haut en bas) qui apparaissent soient des multiples de 97 :
0XXX
XX0X
XXXX
XXXX
Il n'y a pas que la solution triviale. Bon amusement.
Jean-Marc Bourguet a écrit :
>> #define BORNE 10*10*10
> BORNE devrait etre 10000
Oui, mon intention était de remplacer 10000 par 10*10*10*10 pour voir s i
ça ralentissait l'exécution.
Jean-Marc Bourguet a écrit :
>> #define BORNE 10*10*10
> BORNE devrait etre 10000
Oui, mon intention était de remplacer 10000 par 10*10*10*10 pour voir s i
ça ralentissait l'exécution.
Jean-Marc Bourguet a écrit :
>> #define BORNE 10*10*10
> BORNE devrait etre 10000
Oui, mon intention était de remplacer 10000 par 10*10*10*10 pour voir s i
ça ralentissait l'exécution.