Расставить числа 1...9 в пустые ячейки квадрата размером 3x3 так, чтобы сумма чисел в каждой строке, в столбце, а также по диагоналям была равна 15 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не правильно работает программа. Тема: матрица. Расставьте числа 1, 2, 3, 4, 5, 6, 7, 8, 9 в пустые ячейки квадрата размером 3x3 так, чтобы сумма чисел в каждой строке, в каждом столбце, а также по диагоналям равна 15. Вот мой код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
 
int main()
{
    int a[8][3]=
    {
        {1,5,9},
        {3,5,7},
        {5,2,8},
        {5,4,6},
 
        {1,8,6},        
        {3,4,8},        
        {7,2,6},        
        {9,4,2}
    };
    int matr[3][3];
    int i,j,k,f,g,f2,g2,temp,flag=0,l,z;
    srand((unsigned) time(NULL));
    //
for(l=0;l<3;l++)
{
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            matr[i][j]=0;
    matr[1][1]=5;
    f=rand()%3; 
    if(f % 2 == 0)
    {
        g=1;    
        matr[f][g]=1;
        for(i=0;i<3;i++)
            if(matr[i][g]==0)
                matr[i][g]=15-5-matr[f][g];
        f2=1;
        while(1)
        {
            g2=rand()%3;
            if(g2 % 2 == 0)
                break;
        }
        matr[f2][g2]=3;
        for(j=0;j<3;j++)
            if(matr[f2][j]==0)
                matr[f2][j]=15-5-matr[f2][g2];
 
    }
    else
    {
        while(1)
        {
            g=rand()%3;
            if(g % 2 == 0)
                break;
        }
        matr[f][g]=1;
        for(j=0;j<3;j++)
            if(matr[f][j]==0)
                matr[f][j]=15-5-matr[f][g];
        while(1)
        {
            f2=rand()%3;
            if(f2 % 2 == 0)
                break;
        }
        g2=1;
        matr[f2][g2]=3;
        for(i=0;i<3;i++)
            if(matr[i][g2]==0)
                matr[i][g2]=15-5-matr[f2][g2];
 
    }
    for (i=4;i<8;i++)
        if(a[i][0]==matr[0][1])
        {
            matr[0][0]=a[i][1];
            for(j=4;j<8;j++)
                if(a[j][0]==matr[1][0])
                    for(k=1;k<3;k++)
                        if(a[j][k]==matr[0][0])
                            flag++;
 
            if(!flag)
                matr[0][0]=a[i][2];
        }
 
    matr[0][2]=15-matr[0][1]-matr[0][0];
    matr[2][0]=15-matr[1][0]-matr[0][0];
    matr[2][2]=15-matr[1][1]-matr[0][0];
    
    for(i=0;i<3;i++)
    {
        for(z=0;z<l;z++)
            printf("\t");
        for(j=0;j<3;j++)
            printf("%-2d",matr[i][j]);
        printf("\n\n");
    }
}
 
    printf("\n\n");
    system("pause");
 
    return 0;
}
Проблема вот в чем: при заполнении матрицы числами через раз, два появляется такой баг: Тоист не верное число. Как его пофиксить? Спасибо.

Решение задачи: «Расставить числа 1...9 в пустые ячейки квадрата размером 3x3 так, чтобы сумма чисел в каждой строке, в столбце, а также по диагоналям была равна 15»

textual
Листинг программы
#include <iostream>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы