Arrays 河内塔计划放宽数字限制

Arrays 河内塔计划放宽数字限制,arrays,numbers,Arrays,Numbers,我正在用c写一个程序,它将作为一个有数字和数组的河内塔游戏(每个数组代表一个不同的塔)。 在这一点上,我正致力于使在数组之间传输数字成为可能,将它们放在正确的位置,并将它们从之前的位置移除。在最初的几次操作中,该程序似乎运行良好。然后这些数字开始消失,我不知道为什么。 代码如下: #include <stdio.h> #include <stdlib.h> #define N 3 #define Z '\0' int najm(int a[]); //coun

我正在用c写一个程序,它将作为一个有数字和数组的河内塔游戏(每个数组代表一个不同的塔)。 在这一点上,我正致力于使在数组之间传输数字成为可能,将它们放在正确的位置,并将它们从之前的位置移除。在最初的几次操作中,该程序似乎运行良好。然后这些数字开始消失,我不知道为什么。 代码如下:

 #include <stdio.h>
 #include <stdlib.h>
 #define N 3
 #define Z '\0'

 int najm(int a[]); //counts the smallest number in array
 int najmloc(int a[]);//displays the position of the smallest number
 void wypisz (int a[]);

 int main(void)
 {
 int x[N] = {3,2,1}; 
 int y[N] = {Z, Z, Z};
 int z[N] = {Z, Z, Z};
 int wx, wy, wz;  // The smallest number
 int lwx, lwy, lwz;
 int win = 0;   // Have you won
 while (win == 0)
 {
 wypisz (x);  //wypisz = write
 wypisz (y);
 wypisz (z);

 wx = najm (x);   //counts smallest
 wy = najm (y);
 wz = najm (z);

 lwx = najmloc (x);   //counts locations
 lwy = najmloc (y);
 lwz = najmloc (z);

 printf ("x %d %d\n", wx, lwx); //this part is optional, it was just for testing.
 printf ("y %d %d\n", wy, lwy);
 printf ("z %d %d\n", wz, lwz);

 char a, b; //controler 
 printf ("\n\n write down first where, and then where to after spacebar (XYZ): ");
 scanf ("%c %c", &a, &b);

 int tmp;

 switch (a) {
 case 'X':
     {
         tmp = x[lwx];
         x[lwx] = Z;
         break;
     }
 case 'Y':
     {
         tmp = y[lwy];
         y[lwy] = Z;
         break;
     }
 case 'Z':
     {
         tmp = y[lwy];
         z[lwz] = Z;
         break;
     }}


 switch (b){
 case 'X':
     {
         x[lwx+1]= tmp;
         break;
     }
 case 'Y':
     {
        y[lwy+1]= tmp;
         break;
     }
 case 'Z':
     {
         z[lwz+1]= tmp;
         break;
     }

 }

  while ( getchar() != '\n' );
    }
    return 0;
    }


    void wypisz (int a[])
    {
int i;
for (i = 0; i < N; i++) printf ("%d ", a[i]);
printf ("\n");
}
 int najm(int a[])
{

int i, k = 1;
int loc;
int wa = N;
for (i=0; i<N; i++){
    if (a[i] > 0)
    {
        if (a[i] < wa)
            {
            wa = a[i];
            loc = i;
            k = 0;
            }}
    if (a[i] == 0 && k == 1) {wa = 0;}
    }
    return wa;
    }

    int najmloc(int a[])
    {

int i, k = 1;
int loc;
int wa = N;
for (i=0; i<N; i++){
    if (a[i] > 0)
    {
        if (a[i] < wa)
            {
            wa = a[i];
            loc = i;
            k = 0;
            }}
    if (a[i] == 0 && k == 1) {loc = -1;}
    }
    return loc;
    }
#包括
#包括
#定义n3
#定义Z'\0'
int-najm(int-a[])//计算数组中的最小数
内特纳吉姆洛克(内特a[])//显示最小数字的位置
void wypisz(int a[]);
内部主(空)
{
int x[N]={3,2,1};
int y[N]={Z,Z,Z};
intz[N]={z,z,z};
int wx,wy,wz;//最小的数字
int lwx、lwy、lwz;
int win=0;//你赢了吗
while(win==0)
{
wypisz(x);//wypisz=write
维皮兹(y);
wypisz(z);
wx=najm(x);//最小计数
wy=najm(y);
wz=najm(z);
lwx=najmloc(x);//计算位置
lwy=najmloc(y);
lwz=najmloc(z);
printf(“x%d%d\n”,wx,lwx);//此部分是可选的,仅用于测试。
printf(“y%d%d\n”,wy,lwy);
printf(“z%d%d\n”,wz,lwz);
字符a,b;//控制器
printf(“\n\n首先写下where,然后在空格键(XYZ)后写下where to:”;
scanf(“%c%c”、&a和&b);
int tmp;
开关(a){
案例“X”:
{
tmp=x[lwx];
x[lwx]=Z;
打破
}
案例“Y”:
{
tmp=y[lwy];
y[lwy]=Z;
打破
}
案例“Z”:
{
tmp=y[lwy];
z[lwz]=z;
打破
}}
开关(b){
案例“X”:
{
x[lwx+1]=tmp;
打破
}
案例“Y”:
{
y[lwy+1]=tmp;
打破
}
案例“Z”:
{
z[lwz+1]=tmp;
打破
}
}
而(getchar()!='\n');
}
返回0;
}
void wypisz(int a[])
{
int i;
对于(i=0;i

这里的任何帮助对我来说都是非常重要的。

这不是叫河内塔吗?打字错误。我的错。对不起,有没有办法解决这个问题?