PROBLEME
Un carré magique est un 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
#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned int N;
char grille[20][20];
bool result=true;
int sum=0;
scanf("%d\n",&N);
for(int y=0;y<N;y++)
for(int x=0;x<N;x++)
scanf("%d",&grille[x][y]);
for(int i=0;i<N;i++)
sum+mgrille[0][i];
for(int i=0;i<N;i++)
{
int n=0;
for(int j=0;j<N;j++)
n+=grille[i][j];
if(n!=sum)
{
result=false;
break;
}
}
if(result)
for(int i=0;i<N;i++)
{
int n=0;
for(int j=0;j<N;j++)
n+=grille[j][i];
if(n!=sum)
{
result=false;
break;
}
}
if(result)
{
int s=0;
for(int i=0;i<N;i++)
s+=grille[i][i];
if(s!=sum)
result=false;
}
if(result)
{
int s=0;
for(int i=0;i<N;i++)
s+=grille[N-i][i];
if(s!=sum)
result=false;
}
printf(result?"yes\n":"no\n");
return 0;
}
EXPLICATIONS
Pour écrire sur la sortie standard, on utilise la fonction printf().
Pour lire sur l'entrée standard, on utilise la fonction scanf().
|