从坐标(n,n)(n是正整数)(n由键盘输入)到坐标(0,0),其中的变化是每次加上-1的m次方倍(Xm,Ym),其中(Xm,Ym)只能取{(0,1),(0,2),(1,0),(1,1),(2,0)},其中每次坐标运算的结果必须在{(0,A),(A,A),(n,A)A的取值为0到n}。求所有可能的m值以及对应m值下的所有每步的(Xm,Ym)。
编程题,大家看下。
- 提问者网友:欲望失宠
- 2021-05-11 16:06
- 五星知识达人网友:零点过十分
- 2021-05-11 16:28
#include<stdio.h>
main()
{
int i,j,k;
int A[13][2]={(4,4),(4,3),(4,2),(4,1),(4,0),(3,3),(2,2),(1,1),(0,4),(0,3),(0,2),(0,1),(0,0)};
int B[5][2]={(0,1),(0,2),(1,1),(1,0),(2,0)},D[1][2],E[1][2],F[1][2];
for (i=1;i<100;i++)
{
D[0][0]=A[0][0];
D[0][1]=A[0][1];
for(j=0;j<5;j++)
{
E[0][0]=B[j][0];
E[0][1]=B[j][1];
F[1][2]=func(i,D[1][2],E[1][2]);
for(k=0;k<13;k++)
{
if(A[k][0]==F[0][0]&&A[k][1]==F[0][1])
break;
}
if(k==13)
continue;
break;
}
if(j==5)
i=100;
if(F[0][0]==A[13][0]&&F[0][1]==A[13][1])
break;
else
A[0][0]=F[0][0];
A[0][1]=F[0][1];
}
if(i!=100)
printf("%d\n",i);
else
printf("No way.\n");
}
func(int k,int D[1][2],int E[1][2])
{
int c1,c2,i,C[1][2];
if(k%2==1)
i=-1;
else
i=1;
c1=D[0][0]+i*E[0][0];
c2=D[0][1]+i*E[0][1];
C[1][2]={(c1,c2)};
return(C[1][2]);
}