Массив (4 * 4) печатается дважды в следующей программе. Почему? - PullRequest
1 голос
/ 16 апреля 2020

Это - головоломка 15 , которую я программирую с уже предоставленной нам исходной конфигурацией. Здесь я рассмотрел отверстие как число 0.

Я не понимаю, почему массив печатается дважды после нажатия клавиш со стрелками. Сначала я печатаю массив, затем делаю его в соответствии с go необходимыми изменениями в зависимости от введенной клавиши со стрелкой, и, наконец, если полученный массив не выполняется в порядке возрастания, я повторяю шаги. Но согласно этому, это должно было быть напечатано только один раз. Так в чем же проблема?

#include<stdio.h>
#include<stdlib.h>
void print(int x[][4],int,int);
void func(int z[][4],int*,int,int*,int);
void main()
{
    int a[4][4]={1,  4,15, 7,
                 8, 10, 2,11,
                 14, 3, 6,13,
                 12, 9, 5, 0 };
    int b[4][4];
    int n,temp,i,j,x_coord=3,y_coord=3,count=0;

    while(count!=15)
    {
        print(a,4,4);
        count=0;

        n=getch();
        if(n=='H')
        {
            if(x_coord!=3)
                func(a,&x_coord,1,&y_coord,0);
            else
                printf("\nWrong move!\n");
        }
        if(n=='P')
        {
            if(x_coord!=0)
                func(a,&x_coord,-1,&y_coord,0);
            else
                printf("\nWrong move!\n");
        }
        if(n=='K')
        {
            if(y_coord!=3)
                func(a,&x_coord,0,&y_coord,1);
            else
                printf("\nWrong move!\n");  
        }
        if(n=='M')
        {
            if(y_coord!=0)
                func(a,&x_coord,0,&y_coord,-1);
            else
                printf("\nWrong move!\n");
        }
        for(i=0;i<4;i++)
        {
            for(j=0;j<4;j++)
            {
                b[i][j]=a[i][j];
            }
        }
        for(i=0;i<4;i++)
        {
            for(j=0;j<4;j++)
            {
                if(b[i][j]==0)
                {
                    temp=b[i][j];
                    b[i][j]=b[3][3];
                    b[3][3]=temp;
                }
            }
        }
        for(i=0;i<4;i++)
        {
            for(j=0;j<4;j++)
            {
                if(i==4&&j==4)
                    continue;
                if(b[i][j]==4*i+j+1)
                    count++;
            }
        }
    }
}

void print(int x[][4],int r,int c)
{
    int i,j;
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
            printf("%d      ",x[i][j]);
        printf("\n\n");
    }
}

void func(int z[][4],int *x,int x1,int *y,int y1)
{
    z[*x][*y]=z[*x+x1][*y+y1];
    z[*x+x1][*y+y1]=0;
    *x=*x+x1;
    *y=*y+y1;
}
...