Forum > C et C++ > Carré magique >

Carré magique

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Auteur Message
jeremya Posté le 21 avr 2009 15:59:09

Administrateur
Administrateur

Auteur
Auteur

Modérateur
Modérateur

Inscrit le : 08 nov 2008
Localisation : Nord-Pas-de-Calais
Emploi :
Loisirs :

PROBLEME

Un carré magique est une grille carrée dans laquelle des nombres sont placés de telle sorte que la somme des nombres de chaque colonne, chaque ligne et de chacune des deux diagonales soit la même. De plus, Le carré doit contenir une fois chaque nombre, de 1 au nombre de cases de la grille.

Ecrivez un programme qui vérifie si une grille de nombres est un carré magique.

CONTRAINTES

1 <= N <= 20, où N est le nombre de lignes et de colonnes de la grille.

ENTREE

La première ligne de l'entrée contient un entier N : le nombre de cases du côté de la grille de nombres.

Chacune des N lignes suivantes contient N entiers séparés par des espaces : les nombres d'une ligne de la grille.

SORTIE

Vous devez afficher une ligne sur la sortie, contenant le mot "yes" si le carré fourni est un carré magique, et "no" sinon.

CODE SOURCE

Code: C++
  1. #include <cstdio>
  2.  
  3. template <size_t size>
  4. bool is_magic(unsigned int N, unsigned int (&grille)[size][size])
  5. {
  6. for (unsigned int i=1; i<=N; i++) {
  7. unsigned int nb = 0;
  8. for (unsigned int x=0; x<N; x++)
  9. for (unsigned int y=0; y<N; y++)
  10. if (grille[x][y] == i)
  11. nb++;
  12. if (nb != 1)
  13. return false;
  14. }
  15.  
  16. unsigned int sum = 0;
  17. for (int i=0; i<N; i++)
  18. sum += grille[0][i];
  19.  
  20. for (unsigned int i=0; i<N; i++) {
  21. unsigned int n = 0;
  22. for (unsigned int j=0; j<N; j++)
  23. n += grille[i][j];
  24. if (n != sum)
  25. return false;
  26. }
  27.  
  28. for (unsigned int i=0; i<N; i++) {
  29. unsigned int n = 0;
  30. for (unsigned int j=0; j<N; j++)
  31. n += grille[j][i];
  32. if (n != sum)
  33. return false;
  34. }
  35.  
  36. {
  37. unsigned int n = 0;
  38. for (unsigned int i=0; i<N; i++)
  39. n += grille[i][i];
  40. if (n != sum)
  41. return false;
  42. }
  43.  
  44. {
  45. unsigned int n = 0;
  46. for (unsigned int i=0; i<N; i++)
  47. n += grille[N-1-i][i];
  48. if (n != sum)
  49. return false;
  50. }
  51.  
  52. return true;
  53. }
  54.  
  55. int main(int argc, char* argv[])
  56. {
  57. unsigned int N;
  58. scanf_s("%u", &N);
  59.  
  60. unsigned int grille[20][20];
  61.  
  62. for (unsigned int y=0; y<N; y++)
  63. for (unsigned int x=0; x<N; x++)
  64. scanf_s("%u", &grille[x][y]);
  65.  
  66. if (is_magic(N, grille))
  67. printf("yes\n");
  68. else
  69. printf("no\n");
  70.  
  71. return 0;
  72. }
  73.  
Messages : 284 http://www.jeremya.ironie.org citer

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Forum > C et C++ > Carré magique >


Cette page a été générée le 19 mar 2010 04:13:22.
page d'accueil Jeremya's Web Site
jeremya.ironie.org

s'identifier

Nom d'utilisateur :
Mot de passe :

outils

qui est en ligne ?

0 visiteur en ligne