Android解锁图案共有多少种?

Android 图案解锁 9宫格密码解锁 序言  第一次写Android技术博客,不知道该如何下手。 背景  现在人们越来越重视自己的隐私,对于一些涉及用户隐私的应用,用户可能会希望在应用启动时必须先输入密码。传统的数字式密码记忆繁琐、容易破解,而图案解锁则可以解决这个问题。因此,在应用中添加图案解锁功能,可以提高应用的可靠性,获得用户的信任。 阅读详情

九个点

每个点只能连一次 ,如果两个点AB之间有其他点C,在C点被使用之前AB不能直接相连 

两种解法 

一种是直接用简单的9个循环 

#include <stdio.h>

int main(){
	int count=0;
	for(int i1=1; i1<10; i1++){
		for(int i2=1; i2<10; i2++){
			if(i2 == i1) continue;
			if((i2+i1)%2 ==0 ){
				int mid=(i1+i2)/2;
				if(mid == 2 || mid== 8 || mid == 5) continue;
				if(mid == 4 && (i2 == 1 || i2 == 7)) continue;
				if(mid == 6 && (i2 == 3 || i2 == 9)) continue;
			}

			for(int i3=1; i3<10; i3++){
				if(i3 == i1 || i3 == i2) continue;
				if((i2+i3)%2 ==0 ){
					int mid=(i3+i2)/2;
					if((mid == 2 || mid== 8 || mid == 5) && mid != i1) continue;
					if(mid == 4 && i1 != 4 && (i3 == 1 || i3 == 7)) continue;
					if(mid == 6 && i1 != 6 && (i3 == 3 || i3 == 9)) continue;
				}


				for(int i4=1; i4<10; i4++){
					if(i4 == i1 || i4 == i2 || i4 == i3) continue;
					if((i3+i4)%2 ==0 ){
						int mid=(i3+i4)/2;
						if((mid == 2 || mid== 8 || mid == 5) && mid != i1 && mid != i2) continue;
						if(mid == 4 && i1 != 4 && i2!=4 && (i4 == 1 || i4 == 7)) continue;
						if(mid == 6 && i1 != 6 && i2!=6 && (i4 == 3 || i4 == 9)) continue;
					}

					for(int i5=0; i5<10; i5++){
						if(i5 == i1 || i5 == i2 || i5 == i3 || i5 == i4 ) continue;
						if( i5!= 0 && (i4+i5)%2 ==0 ){
							int mid=(i4+i5)/2;
							if((mid == 2 || mid== 8 || mid == 5) && mid != i1 && mid != i2 && mid != i3) continue;
							if(mid == 4 && i1 != 4 && i2!=4 && i3!=4 && (i5 == 1 || i5 == 7)) continue;
							if(mid == 6 && i1 != 6 && i2!=6 && i3!=6 && (i5 == 3 || i5 == 9)) continue;
						}

						if(i5 == 0){
							printf("%d\t%d%d%d%d\n",count+1, i1,i2,i3,i4);
							count++;
						}else{

							for(int i6=0; i6<10; i6++){
								if( i6 == i1 || i6 == i2 || i6 == i3 || i6 == i4 || i6 == i5) continue;
								if( i6 != 0 && (i5+i6)%2 ==0 ){
									int mid=(i5+i6)/2;
									if((mid == 2 || mid== 8 || mid == 5) && mid != i1 && mid != i2 && mid != i3 && mid !=i4) continue;
									if(mid == 4 && i1 != 4 && i2!=4 && i3!=4 && i4!=4 && (i6 == 1 || i6 == 7)) continue;
									if(mid == 6 && i1 != 6 && i2!=6 && i3!=6 && i4!=6 && (i6 == 3 || i6 == 9)) continue;
								}

								if(i6 == 0){
									printf("%d\t%d%d%d%d%d\n", count + 1, i1, i2, i3, i4, i5);
									count++;
								}else{

									for(int i7=0; i7<10; i7++){
										if(i7 == i1 || i7 == i2 || i7 == i3 || i7 == i4 || i7 == i5 || i7 == i6) continue;
										if(i7!=0 && (i6+i7)%2 ==0 ){
											int mid=(i6+i7)/2;
											if((mid == 2 || mid== 8 || mid == 5) && mid != i1 && mid != i2 && mid != i3 && mid !=i4 && mid !=i5) continue;
											if(mid == 4 && i1 != 4 && i2!=4 && i3!=4 && i4!=4 && i5!=4 && (i7 == 1 || i7 == 7)) continue;
											if(mid == 6 && i1 != 6 && i2!=6 && i3!=6 && i4!=6 && i5!=6 && (i7 == 3 || i7 == 9)) continue;
										}

										if(i7 == 0){
											printf("%d\t%d%d%d%d%d%d\n", count + 1, i1, i2, i3, i4, i5, i6);
											count++;
										}else{


											for(int i8=0; i8<10; i8++){
												if(i8 == i1 || i8 == i2 || i8 == i3 || i8 == i4 || i8 == i5 || i8 == i6 || i8==i7) continue;
												if(i8!= 0 && (i7+i8)%2 ==0 ){
													int mid=(i7+i8)/2;
													if((mid == 2 || mid== 8 || mid == 5) && mid != i1 && mid != i2 && mid != i3 && mid !=i4 && mid !=i5 && mid!=i6 ) continue;
													if(mid == 4 && i1 != 4 && i2!=4 && i3!=4 && i4!=4 && i5!=4 && i6!= 4 && (i8 == 1 || i8 == 7)) continue;
													if(mid == 6 && i1 != 6 && i2!=6 && i3!=6 && i4!=6 && i5!=6 && i6!= 6 && (i8 == 3 || i8 == 9)) continue;
												}

												if(i8 == 0){
													printf("%d\t%d%d%d%d%d%d%d\n", count + 1, i1, i2, i3, i4, i5, i6, i7);
													count++;
												}else{


													for(int i9=0; i9<10; i9++){
														if(i9 == i1 || i9 == i2 || i9 == i3 || i9 == i4 || i9 == i5 || i9 == i6 || i9==i7 || i9 == i8 ) continue;
														if(i9 == 0){
															printf("%d\t%d%d%d%d%d%d%d%d\n", count + 1, i1, i2, i3, i4, i5, i6, i7, i8);
															count++;
														}else{
															printf("%d\t%d%d%d%d%d%d%d%d%d\n", count + 1, i1, i2, i3, i4, i5, i6, i7, i8, i9);
															count++;
														}

													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	printf("\ntotal:%d\n", count);
	return 0;
}

额,看着头疼

一种是用回溯法 

#include <stdio.h>
#define bool int 
#define true 1
#define false 0

int ptn[10];
int index[10];
bool used[10];
int len;
int total;

void ini()
{
	int i;
	len = 1;
	total = 0;
	for (i = 0; i < 10; i++)
	{
		ptn[i] = 9;
		index[i] = 1;
		used[i] = false;
	}
}
bool CanUse(int len, int num)
{
	int i;
	if (len == 0)
		return false;

	for (i = 0; i < 9; i++)
		used[i] = false;

	for (i = 0; i < len - 1; i++)
		used[ptn[i] - 1] = true;

	if (used[num - 1])
		return false;

	int prenum, mid;
	prenum = ptn[len - 2];

	if (num == 5 || prenum == 5)
		return true;

	mid = (prenum + num) / 2;
	if (prenum % 2 == 1 && num % 2 == 1)
	{
		return used[mid - 1];
	}
	else if (prenum % 2 == 0 && num % 2 == 0)
	{
		if (mid == 5)
			return used[5 - 1];
	}
	return true;
}
int GetNum(int len)
{
	int i;
	for (i = index[len - 1]; i <= 9; i++)
	{
		if (CanUse(len, i))
			break;
	}
	return i;
}

bool Next()
{
	int num;
	do
	{
		num = GetNum(len);
		while (num == 10)//
		{
			index[len - 1] = 1;
			if (len > 1) index[len - 2] ++;
			len--;
			num = GetNum(len);
			if (len == 1 && num == 10 )
			return false;
		}
		
		ptn[len - 1] = num;
		index[len - 1] = num;
		len++;
		used[num] = true;
		return true;
	} while (len > 0);
	return false;
}
void print()
{
	int i;
	if (len <= 4)
		return;
	total++;
	printf("%d\t",total);
	for (i = 0; i < len - 1; i++)
	{
		printf("%d",ptn[i]);
	}
	printf("\n");
}


int main()
{
	ini();
	int t;
	while (Next())
	{
		print();
	}
	printf("%d\t", total);
	return 0;

}

效率第一种明显比第二种高,大约快了三倍 

在编程上来说,第一种速度较快,一个同事大概20分钟搞定

好几年没编程了,搞了两天才搞定,惊恐

编译后第一个程序8.5k,第二个7k

个人感觉效率快慢原因在于一是第二个函数调用多,二是第一个程序把许多判断都固化了。也不知道对不对,有高人能分析一下两个程序效率吗?

结果都一样 ,共有 389112种解锁图案。

编程题:安卓图案解锁 题目连接:牛客网 题目的意思是这样的:给定一个安卓开锁的序列,确定给出的序列是否是合法的解锁序列。 解锁的规则限制: 1.每个数字最多只会被使用一次。 2.如果想直接连接两个数字,但是线段中会经过另一个数字,当且仅有那个数字已经在之前就被使用过了,才会合法。(比如你想从1直接连接到9,那么要么是1->5->9,要么是5在之前已经被使用过了,然后才能直接从1->9) 初看本题还是挺有趣的,其实就是一道模拟。我的思路是:顺着给出的序列走,假设在某时刻数字为x,那么判断这个位置是否之前已经被走 阅读详情

相关推荐

Android图案解锁机制及源码解析

图案解锁作为一种简单直观的安全验证方式,已经成为许多智能设备默认的解锁方式之一。与传统的数字密码相比,图案解锁不仅操作简便,还能为用户提供独特的个性化体验。用户只需用手指在屏幕上划出预设的图形即可解锁设备。然而,在简化操作的同时,图案解锁的安全性也不容忽视,因此本文将探讨如何在保持易用性的同时,强化图案解锁的安全机制。为了提升用户体验,图案解锁在设计上考虑了多种因素。首先,它需要提供清晰的视觉引导,帮助用户记住并快速绘制图案。其次,为了防止误触,系统通常会实现防抖动机制,以减少错误图案的输入。

weixin_35756373的博客 1043

九宫格手势解锁

由于没有图片素材实现效果比较简单》 重新添加一个继承与UIView 的类 YFNineFunctionView.h 初始化时加载按钮,并设置属性 - (instancetype)init { self = [super init]; if (self) { //初始化时加载视图 [self setUpView];

buildSetting的博客 2675

手机锁屏图案有多少种

一小段代码用来计算手机的锁屏图案密码一共有多少种,并列出所有可能

Android 图形解锁/手势解锁 / 手势密码 / 图案密码 / 九宫格密码

PatternLocker 项目地址:ihsg/PatternLocker  简介:Android 图形解锁/手势解锁 / 手势密码 / 图案密码 / 九宫格密码 更多:作者   提 Bug    标签:   此为 Android App 中常用控件之一的图案解锁(手势解锁、手势密码、九宫格密码、九宫格图形锁等)控件开源库,PatternLockerView 为主控件,负责图案密码的设...

未来很长,但我会努力的走下去。 1万+

图案解锁(九宫解锁+九点解锁)

这是图案解锁的项目,对大家 很有帮助的 ,不妨下载学习学习

手势图案解锁

将图案解锁封装成jar包,支持图案的颜色改变、指纹解锁的样式、记录密码,里面有说明文档和jar包

java里面常用的锁屏图案_最常用的100种解锁图案(附:手机图案万能解锁法)...

说到九宫格解锁,相信很多用户都认识,日常使用手机中,将锁屏设置成九宫格图案,不仅可以保护个人隐私,还可增加手机解锁的趣味性,对此,很多机智的网友脑洞大开设计了一系列解锁图案,通过不同的组合方式将解锁图案变得复杂又好看,下面小编整理了截止目前为止最复杂和兼具美感的解锁图案,一起来看看。1、5-6-7-2-9-4-52、7-2-9-4-3-8-1-6-53、1-4-8-6-3-5-7-2-9,最后移到...

weixin_30436581的博客 3万+

Arduino程序设计(十四)舵机控制实验(SG90)

本文介绍SG90舵机控制原理及实验,主要内容有:1、介绍SG90舵机;2、舵机0°~180°来回转动;3、串口控制舵机转动固定角度。(1)舵机是一种位置(角度)伺服的驱动器。舵机只是一种通俗的叫法,其实质是一个伺服马达。在需要角度不断变化并可以保持的控制系统中应用广泛。如遥控机械人、飞机模型等。(2)舵机的转动角度为0~180°,其内部结构包括电机,控制电路和机械结构三部分。电机有三根线引出,分别接VCC、GNG和信号线。

Alice的博客 1万+

手机九宫格滑动解锁方法种数(389112种)

有妹子问手机滑动解锁多少种方案,于是写了个记忆化搜索得出答案,也是有趣。 #include #include #include #include #include using namespace std; #define N 4 int vis[N][N]; bool check(int x1, int y1, int x2, int y2) { if(abs(x1 -

Dikea's Blog 5066

当今用于探测和阻止无人机的 10 种反无人机技术

利用反无人机技术应对无人机威胁。

网络研究观 3540

LVGL配置文件lv_conf.h详解

lv_conf.h是一个用户级别的文件,它不属于内核的部分,因此,在不同的工程中,该文件有可能存在差异。lv_conf.h文件具有两大功能:(1)配置功能:内存、屏幕刷新周期、输入设备的读取周期,等等;(2)裁剪功能:使能失能某些功能,有效地优化Flash的分配。

qq_28576837的博客 5559

android图案怎么解锁,Android解锁图案共有多少种?

九个点每个点只能连一次 ,如果两个点AB之间有其他点C,在C点被使用之前AB不能直接相连两种解法一种是直接用简单的9个循环#include int main(){int count=0;for(int i1=1; i1<10; i1++){for(int i2=1; i2<10; i2++){if(i2 == i1) continue;if((i2+i1)%2 ==0 ){int mi...

weixin_29522501的博客 424

每天一个优秀提示词学习收藏 - 文本创作篇(二)

宝子们,今天不藏私啦!我把这段时间四处搜罗、潜心钻研出来的文本创作 Prompt 提示词大礼包双手奉上,这可都是能让你的 AI 创作水平原地起飞的干货!走过路过不要错过,赶紧码住,开启你的 AI 创作进阶之旅吧!

2401

安卓图案解锁

链接:https://www.nowcoder.com/questionTerminal/8bc1ddfef83e440c9451220f845bf4a8 来源:牛客网 栗主席(lizi)是某xxxx大学的一个不得了的程序猿,然而没想到吧,他竟然有女盆友,我们假设为QAQ!!! 那天,QAQ问栗子:你的小米5s的图像解锁密码到底是多少? 栗子:嘛?我仔细想想... QAQ:你仿佛...

black_horse2018的博客 1345

数据库:关系运算整理大全(包括关系代数、元组关系演算、域关系演算)

数据库关系运算: 1. 关系代数(基本关系代数、附加关系代数、扩展关系代数) 2. 元组关系演算 3. 域关系演算

ysji's blog 1万+

Claude Code 错误解决方案 API Error: 前缀通用错误

本文分析了Claude Code与Anthropic API通信时出现的通用错误处理问题。当API返回未分类错误时,系统会直接显示"API Error: "前缀的原始错误信息。通过错误链路追踪发现,这是由于未匹配特定错误类型时触发了通用兜底处理逻辑。文章提供了三种解决方案:查看具体错误内容、启用调试日志以及提交问题反馈,并建议用户关注错误码、使用/compact命令处理上下文超限问题。最后强调这些未分类错误是预期行为,用户应通过错误消息中的线索自行排查或反馈开发者。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1349

牛客-安卓图案解锁

题目链接 题目: 栗主席(lizi)是某xxxx大学的一个不得了的程序猿,然而没想到吧,他竟然有女盆友,我们假设为QAQ!!! 那天,QAQ问栗子:你的小米5s的图像解锁密码到底是多少? 栗子:嘛?我仔细想想… QAQ:你仿佛在逗我… … 栗子:我的图像解锁用过好多次密码,后来都是用指纹解锁,所以忘记密码辣。但是我记得可能是那几个密码 QAQ:那你务必告诉我… 栗子: … 然后,栗子就写下了一堆可...

jahup的博客 1875

深入浅出:大型语言模型(LLM)的全面解读

在当今的数字化时代,人工智能技术已经成为各行各业的核心驱动力之一。而在人工智能的领域中,大型语言模型(LLM)作为一种引人瞩目的技术,正在以其强大的语言理解和生成能力引领着一场革命。本文旨在深入浅出地解读大型语言模型,探讨其背后的原理、技术突破、应用场景以及未来发展趋势。

fudaihb的博客 10万+

牛客1002-安卓图案解锁

来源:牛客网。

JiangYuan_03的博客 1062

深度学习100例-卷积神经网络(CNN)彩色图片分类 | 第2天

文章目录前期工作设置GPU导入数据标准化可视化构建CNN网络编译训练模型预测模型评估 前期工作 设置GPU 如果使用的是CPU可以忽略这步 import tensorflow as tf gpus = tf.config.list_physical_devices("GPU") if gpus: gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量

“365天深度学习训练营”报名进行中~ 7855

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

5.8 安卓图案解锁

来源:牛客网栗主席(lizi)是某xxxx大学的一个不得了的程序猿,然而没想到吧,他竟然有女盆友,我们假设为QAQ!!!那天,QAQ问栗子:你的小米5s的图像解锁密码到底是多少?栗子:嘛?我仔细想想...QAQ:你仿佛在逗我......栗子:我的图像解锁用过好多次密码,后来都是用指纹解锁,所以忘记密码辣。但是我记得可能是那几个密码QAQ:那你务必告诉我...栗子: ...然后,栗子就写下了一堆可能的密码,安卓图案解锁中,数字对应的位置已经标出。

m0_74102664的博客 1225

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android图案解锁忘了怎么解,安卓手机解锁图案忘了怎么办?手机解锁密码忘了怎么办?...

现在在使用安卓手机的时候图案解锁是一个非常流行的方式,毕竟对于追求视觉体验的朋友们而言这种操控既新颖而且比数字密码解锁要有趣多了。但是随着大家用机时间一长,而且有的用户追求新鲜感频率太高,经常换解锁图案,换的多了时间长了就容易混淆,最常见的就是不知道手机解锁图案忘了怎么办?人生最痛苦的事情莫过于忘记了密码,如果银行卡的密码忘了,我们就不能取出钱来;同样的如果我们把手机的密码忘了,拿着手机等于带了一...

weixin_29749887的博客 3967

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android屏幕解锁图案,安卓手机图案屏幕锁解锁方法!!

当你的安卓手机密码锁忘记了怎么办?今天一不小心把手机改了图案锁结果由于改的时候匆忙结果忘记了,在网上找了好多方法都无果,也有人说重新刷机就会好!!这个简直就是废话,刷机当然能好了!!关键是解锁要解决两大难题:1、系统不变。2、软件和通讯录不便!后来经过几番尝试想到了手机重启时有刷机和恢复等模式可以选择,想了想最后选择了恢复,下边简单几步搞定安卓手机密码锁,下面看具体步骤:(但切记这个方法是无法保存...

weixin_39847945的博客 1911

安卓图案解锁NC13585

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 栗主席(lizi)是某xxxx大学的一个不得了的程序猿,然而没想到吧,他竟然有女盆友,我们假设为QAQ!!! 那天,QAQ问栗子:你的小米5s的图像解锁密码到底是多少? 栗子:嘛?我仔细想想… QAQ:你仿佛在逗我… … 栗子:我的图像解锁用...

Anterior_condyle的博客 776

图案解锁

图案解锁实现步骤 1.自定义一个View package com.example.administrator.mydemo.graphiclock; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graph...

懒惰的四叶草的博客 1576
下一篇: OpenGL es gluLookAt 函数
layject
博客等级 码龄20年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值