首页 > 编程知识 正文

手机密码锁图案大全,破解手机图案锁的方法

时间:2023-05-04 21:27:58 阅读:156668 作者:4455

链接: https://www.now coder.com/question terminal/8bc1ddfef 83 e 440 c 9451220 f 845 bf4a 8

来源:牛客网

栗主席(lizi )是某xxxx大学的专业猴子,难道他有女盆友,我们假设是QQ!

当天,QAQ问板栗:“你的小米5s图片解锁密码到底是多少?

栗:算了吗? 我会仔细考虑的.

QAQ :你好像在戏弄我.

.

栗:解锁我的图片我用过好几次密码。 之后,因为用指纹解除了锁定,所以忘记了密码的痛苦。 但我记得可能是那几个密码

QAQ :那么,请务必告诉我.

栗:

然后,栗写下了一堆可能的密码。 在安卓图案的锁定解除中,会显示与数字对应的位置。

不过,栗子当然不想把真正的密码告诉QAQ,所以在QAQ上提供的一系列密码中,甚至有不符合安卓图案解锁规则的密码。

QAQ也知道栗子不诚实,给了他很多错误的密码,甚至是不符合规则的密码。 所以,我想让你找出哪个密码不符合规则。

链接: https://www.now coder.com/question terminal/8bc1ddfef 83 e 440 c 9451220 f 845 bf4a 8

来源:牛客网

Android解锁密码具有以下特点:

1 .每个数字最多只使用一次。

2 .想直接连接两个数字,但只有线段中有另一个数字通过,且该数字以前已经使用过,才合法。 (例如,如果想从1到9连续领取,1-3-9或者3之前已经使用过,可以从1-9直接领取)

输入描述:

多组输入每组输入占一行,包含一系列数字(1~9),长度为30 输出描述:

输出此Android模式解除锁定是否合法,如果合法,则输出“YES”,相反输出“NO”(请参阅示例输出)。 请勿输出引号)例1

输入1456919531596315953 yesno yesno http://www.Sina.com /

# include stdio.h # include string.h # include algorithm # includeiostreamusingnamespacestd; int v[10],flag; int leap[10][10]; void init () { leap[1][3]=leap[3][1]=2; leap[4][6]=leap[6][4]=5; leap[7][9]=leap[9][7]=8; leap[1][7]=leap[7][1]=4; leap[2][8]=leap[8][2]=5; leap[3][9]=leap[9][3]=6; leap [1] [9]=leap [9] [1]=leap [3] [7]=leap [7] [3]=5; (} int main ) ) { string str; init (; wile(cinstr ) ) memset ) v,0,sizeof(v ) v ); int len=str.length (; if (! len({printf(no ) n ); 连续; } flag=false; int x=str[0]-'0'; v[x]=1; for(intI=1; ilen; I ) { int y=str[i]-'0'; if(v ) y ) { flag=true; 黑; (if (! LEAP[x][y]}{x=y; v[y]=1; (else ) if ) v[leap[x][y] ) x=y; v[y]=1; } else{ flag=true; 黑; }}if(flag ) printf ) (no(n ); elseprintf(yes(n ); } return 0; }

351 .安卓系统手势解锁

我们知道Android有一个通过手势解锁的界面,它是用3 x 3点绘制的网格。

给你两个整数。 分别是m和n。 其中1

m ≤ n ≤ 9,那么请你统计一下有多少种解锁手势,是至少需要经过 m 个点,但是最多经过不超过 n 个点的。

先来了解下什么是一个有效的安卓解锁手势:

每一个解锁手势必须至少经过 m 个点、最多经过 n 个点。
解锁手势里不能设置经过重复的点。
假如手势中有两个点是顺序经过的,那么这两个点的手势轨迹之间是绝对不能跨过任何未被经过的点。
经过点的顺序不同则表示为不同的解锁手势。

解释:

| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
无效手势:4 - 1 - 3 - 6
连接点 1 和点 3 时经过了未被连接过的 2 号点。

无效手势:4 - 1 - 9 - 2
连接点 1 和点 9 时经过了未被连接过的 5 号点。

有效手势:2 - 4 - 1 - 3 - 6
连接点 1 和点 3 是有效的,因为虽然它经过了点 2 ,但是点 2 在该手势中之前已经被连过了。

有效手势:6 - 5 - 4 - 1 - 9 - 2
连接点 1 和点 9 是有效的,因为虽然它经过了按键 5 ,但是点 5 在该手势中之前已经被连过了。

示例:

输入: m = 1,n = 1
输出: 9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/android-unlock-patterns
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:从每个点出发,dfs搜索即可;可优化,从0开始与从3、7、9开始的对称,从2开始的与从4、6、8开始的对称

class Solution {public: int v[10],sum=0; int temp[10][10]; void init(){ temp[1][3]=temp[3][1]=2; temp[4][6]=temp[6][4]=5; temp[7][9]=temp[9][7]=8; temp[1][7]=temp[7][1]=4; temp[2][8]=temp[8][2]=5; temp[3][9]=temp[9][3]=6; temp[1][9]=temp[9][1]=temp[3][7]=temp[7][3]=5; } void dfs(int x,int num,int n,int m){ if(num>n) return ; if(m<=num&&num<=n) sum++; for(int i=1;i<=9;i++){ if(i==x||v[i]||(temp[x][i]&&!v[temp[x][i]])) continue; v[i]=1; num++; dfs(i,num,n,m); v[i]=0; num--; } } int numberOfPatterns(int m, int n) { init(); int ans=0; memset(v,0,sizeof(v)); sum=0; v[1]=1; dfs(1,1,n,m); ans+=sum*4; memset(v,0,sizeof(v)); sum=0; v[2]=1; dfs(2,1,n,m); ans+=sum*4; memset(v,0,sizeof(v)); sum=0; v[5]=1; dfs(5,1,n,m); ans+=sum; return ans; }};

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。