|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
- }
复制代码
|
|