Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- int funkcija(int** polje, int m){
- if(ponavljanjeBrojeva(polje, m) == 0)
- return 0;
- int ukupniZbroj = 0;
- for(int i = 1; i <= m * m; i++)
- ukupniZbroj += i;
- int zbroj = ukupniZbroj / m;
- for(int i = 0; i < m; i++){
- for(int j = 0; j < m; j++){
- if(polje[i][j] == 0){
- polje[i][j] = provjeri(polje, i, j, m, zbroj);
- }
- }
- }
- if(ponavljanjeBrojeva(polje, m) == 0)
- return 0;
- return 1;
- }
- int ponavljanjeBrojeva(int** polje, int m){
- for(int i = 1; i <= m * m; i++){
- int brojac = 0;
- for(int j = 0; j < m; j++){
- for(int k = 0; k < m; k++){
- if(polje[j][k] == i)
- brojac++;
- if(polje[j][k] > m * m)
- return 0;
- }
- }
- if(brojac > 1)
- return 0;
- }
- return 1;
- }
- int provjeri(int **polje, int k, int z, int m, int zbroj){
- for(int i = 1; i <= m * m; i++){
- if(i + zbrojRed(polje, m, k) == zbroj && i + zbrojStupac(polje, m, z) == zbroj){
- if(k == z){
- if(zbrojDesnaDijagonala(polje, m) + i == zbroj && zbrojLijevaDijagonala(polje, m) + i == zbroj){
- return i;
- }
- } else{
- return i;
- }
- }
- }
- }
- int zbrojRed(int **polje, int m, int red){
- int zbroj = 0;
- for(int j = 0; j < m; j++){
- zbroj += polje[red][j];
- }
- return zbroj;
- }
- int zbrojStupac(int **polje, int m, int stupac){
- int zbroj = 0;
- for(int i = 0; i < m; i++){
- zbroj += polje[i][stupac];
- }
- return zbroj;
- }
- int zbrojLijevaDijagonala(int **polje, int m){
- int zbroj = 0;
- for(int i = 0; i < m; i++){
- zbroj += polje[i][i];
- }
- return zbroj;
- }
- int zbrojDesnaDijagonala(int **polje, int m){
- int zbroj = 0;
- for(int i = m - 1; i >= 0; i--){
- zbroj += polje[i][i];
- }
- return zbroj;
- }
- int main(void){
- int m;
- scanf("%d", &m);
- int **polje = (int**)calloc(m, sizeof(int*));
- for(int i = 0; i < m; i++){
- polje[i] = (int*)calloc(m, sizeof(int));
- for(int j = 0; j < m; j++)
- scanf("%d", &polje[i][j]);
- }
- if(funkcija(polje, m) == 0){
- printf("Ovo nije magicni kvadrat.");
- return 0;
- }
- for(int i = 0; i < m; i++){
- for(int j = 0; j < m; j++){
- printf("%3d", polje[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement