马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 bild 于 2021-11-27 10:32 编辑 #include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
char key[3][4],a[10],str[9][3],result[4][5];
int i,z,n,b,c,d=0,e=0,num,count,p=0,x=0;
_Bool flag=1;
for(i=0;i<=4;i++)
{
z=0;n=0;b=0;c=0;d=0;e=0;num=1;count=0;p=0;
flag=1;
n=0;
for(z=0;z<9;z++)
{
scanf("%c",&a[z]);
if(a[z]=='\n')
break;
}
a[z]='\0';
for(n=0;n<9;n++)
{
switch(a[n])
{
case '1':case '2':case '3':
b=0;break;
case '4':case '5':case '6':
b=1;break;
case '7':case '8':case '9':
b=2;break;
}
switch(a[n])
{
case '1':case '4':case '7':
c=0;break;
case '2':case '5':case '8':
c=1;break;
case '3':case '6':case '9':
c=2;break;
}
if(n==z)break;
key[b][c]=n+1;
}
for(num=1;num<=n;num+=2)
{
b=d=0;
c=e=0;
for(b=0;b<3;b++)
{
for(c=0;c<3;c++)
{
if(key[b][c]==num)
{
str[p][0]=b;
str[p][1]=c;
str[p][2]='\0';
p++;
goto A;
}
}
}
A: for(d=0;d<3;d++)
{
for(e=0;e<3;e++)
{
if(key[d][e]==num+1)
{
str[p][0]=d;
str[p][1]=e;
str[p][2]='\0';
p++;
goto B;
}
}
}
B: for(count=0;count<=num-1;count++)
{
if(strcmp(str[num],str[count])==0)
{
flag=0;
goto C;
}
}
if(fabs(b-d)==2||fabs(c-e)==2)
{
str[p][0]=fabs(b-d)/2;
str[p][1]=fabs(c-e)/2;
str[p][2]='\0';
++i;
}
}
C: if(flag)
{
result[x][0]='Y';
result[x][1]='E';
result[x][2]='S';
result[x][3]='\0';
x++;
}
else
{
printf("1\n");
result[x][0]='N';
result[x][1]='O';
result[x][2]='\0';
x++;
}
memset(a,0,sizeof(a));
memset(key,0,sizeof(key));
memset(str,0,sizeof(str));
}
for(x=0;x<=4;x++)
{
printf("%s\n",result[x]);
}
return 0;
}
在B这个位置,为什么明明两个字符串都不一样,但是strcmp依然输出0啊
这个用于测试安卓图案解锁,1代表左上方的那个键,3代表右上的那个键,7代表左下的那个键,9代表右下的那个键
正确答案
输入:12589
14569
1745
1953
输出:YES
YES
NO
NO
以12589为例
在B处的第一个循环时str[1]={0,1}而str[0]={0,0}
本帖最后由 jhq999 于 2021-11-27 12:09 编辑
B: for(count=0;count<=num-1;count++)
{
if((str[count][0]==str[num][0])&&(str[count][1]==str[num][1])&&(str[count][2]==str[num][2]))/////////////str[num][0]=0的话不管后面是多少就相当于空字符串,只有挨个对比,或者把里面的内容变成字符,比如0变成'0'
{
flag=0;
goto C;
}
}
|