判断手势_手势密码有几种?
前几天想到一个有趣的问题,我们每个手机都可以设置手势密码,那么手势密码一共有几种呢?
我们先了解下手势密码设置的规则:密码必须不小于4个点,点在第一次经过时不允许被跳过。
如图,我们把每个点编上序号。
则以下这种是不合法的。
5被连接了两次
而
这种是合法的,因为5被跳过了。而被跳过的点不被记为总点数。
用数字表示的话,例如1923则不能为四个点连接的情况,因为1和9之间有5,所以实际上是15923。
如果用纯理性分析的话,这无疑是个极为复杂的数学题,很多数学技巧似乎都被限制住。但是,我们有计算机这个无比强大的工具。这里,我选择用C语言处理。
宏定义
#define SIZE 10000
#define XSIZE 5
#define SIZEX 11111
以五个数字组成的密码举例,SIZE为
主函数部分
void main(){int n = 0;int i = SIZEX, j = 0;for (i; i < SIZE*10; i++) {if(check(i)) n++;}printf("%d",n);
}
主函数部分十分简单,就是简单的循环遍历。
check函数部分
int check(int i)
{int k = 0, j = SIZE;int a[XSIZE];while (k<XSIZE) {a[k] = i / j;i = i - a[k] * j;j = j / 10;k++;}for (k=0; k < XSIZE; k++) {for (j = k + 1; j < XSIZE; j++) {if (a[k] == a[j]) return 0;}if (a[k] == 0) return 0;}for ( k = 0; k+1< XSIZE; k++){if ((a[k] + a[k + 1]) == 4) {if (!check1(a, k)) return 0;}if ((a[k] + a[k + 1]) == 10) {if (!check1(a, k)) return 0;}if ((a[k] + a[k + 1]) == 16) {if (!check1(a, k)) return 0;}if (a[k] - a[k + 1] == 6 || a[k + 1] - a[k] == 6) {if (!check1(a, k)) return 0;}}return 1;
}
该函数大致分为三个部分,第一部分,对传入的i分离i的各个位数的数字,并存入数组中。第二部分,设置两个循环判断数组中是否有相同的数字,第三部分,设置循环,遍历相邻的两个数字,判断这两个数字是否满足可能非法的条件,即两个数字间是否包含第三个数字,然后传入check1函数,判断两个数字前是否有中间包含的第三个数字,存在的话说明是合法的。
check1函数
int check1(int *a, int k) {for (int i = 0; i < k; i++) {if (a[i] == (a[k] + a[k + 1]) / 2) return 1;}return 0;
}
结论
运行程序,发现各个数字的个数,其中
4位的有1624个
5位的有7152个
6位的有26016个
7位的有72912个
8位的有140704个
9位的有140704个
总共有389112种!
值得一提的是,6位以下的个数甚至每到10000种,所以设置密码最好设置6位以上的,当然不怕忘记的话,可以设置9位的变态密码。
完。
判断手势_手势密码有几种?相关推荐
- java正则表达式判断问号_正则表达式问号的四种用法详解
原文符号 因为?在正则表达式中有特殊的含义,所以如果想匹配?本身,则需要转义,\? 有无量词 问号可以表示重复前面内容的0次或一次,也就是要么不出现,要么出现一次. 非贪婪匹配 贪婪匹配 在满足匹配时 ...
- recyclerview 滚动冲突_如何处理手势冲突 | 手势导航连载 (三)
作者 / Chris Banes, Android 开发者关系团队工程师 我们将在近期为大家带来一个关于 "手势导航" 的系列连载,本文是手势导航连载的第三篇,如果您希望查看前两篇 ...
- 深度学习:在图像上找到手势_使用深度学习的人类情绪和手势检测器:第2部分
深度学习:在图像上找到手势 情感手势检测 (Emotion Gesture Detection) Hello everyone! Welcome back to the part-2 of human ...
- 深度学习:在图像上找到手势_使用深度学习的人类情绪和手势检测器:第1部分
深度学习:在图像上找到手势 情感手势检测 (Emotion Gesture Detection) Has anyone ever wondered looking at someone and tri ...
- demo h5 touch 移动_H5案例分享:移动端touch事件判断滑屏手势的方向
移动端touch事件判断滑屏手势的方向 方法一 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touchmove事件时,在获取此时手指的横坐标 ...
- 取消计算机用户密码页面,电脑怎么关闭开机密码_电脑开机取消登录密码的两种方法-系统城...
为了电脑的安全和隐私,很多小伙伴在使用电脑时都会设置开机密码.然而有的用户却觉得在设置后每次开机都很麻烦,想要将其取消,那电脑怎么关闭开机密码呢?对于这一问题,今天小编就来教大家关于电脑开机取消登录密 ...
- 自定义手势--输入法手势技术
进行软件开发时,通常我们都喜欢使用较新版本的工具,但这里我为什么使用低版本的SDK来开发Android游戏呢?这里介绍下原因: 1.Android SDK 属于向下兼容!那么低版本可以运行的,高版本基 ...
- 苹果6s照相快门声音设置_手机隐藏的10种快门启动方式,你都知道吗?
上次我们讲了相机设置--手机照片尺寸的设置(错过的朋友可以在本文文末点击阅读)今天我们要来讲讲相机设置中的第二课「快门设置」.今天讲的快门设置不是我们以往说的设置"快门速度",而是 ...
- 用 JavaScript 实现手势库 — 手势动画应用【前端组件化】
前端<组件化系列>目录 「一」用 JSX 建立组件 Parser(解析器) 「二」使用 JSX 建立 Markup 组件风格 「三」用 JSX 实现 Carousel 轮播组件 「四」用 ...
最新文章
- Fragment详解之四——管理Fragment(2)
- 每天一个linux命令cd,每天一个linux命令-cd
- test 7 3-22 2021省选模拟赛seven
- 关于c语言编写 顺序表 的创建、插入、修改、删除、显示、退出 的程序案例
- SpringSecurity Basic Authentication
- java中类和实例化_Java中类的初始化与实例化
- failed to accept an incoming connection: connection from 192.168.1.114 rejected, allowed hosts: 1
- window添加右键菜单
- Shell script 笔记
- 信号数据EMD分解+IMF时序数据LSTM预测建模实践
- windows系统查看md5
- 虚拟机安装win7时遇到的问题及解决方案
- JavaScript正则表达式学习笔记之一 - 理论基础
- XSS Filter Evasion Cheat Sheet
- 比普通空调好,比净化器静 海尔唯一获“空·净一体”A+认证
- Kafka常用命令之kafka-topics.sh
- Flink状态一致性检查点
- 社群网站广告有效了!竟是普通的陈列广告+小型线上活动
- 手把手写C++服务器(7):给C语言程序员看的C++科普
- 3d打印热床的PEI/玻璃/晶格玻璃/柔性平台/弹簧钢板如何选择
热门文章
- mysql频繁查询出错_Mysql数据库频繁查询错误解决方案
- mysql5.6.30源码安装_Centos7.1 for MySQL5.6.30源码安装及多实例配置
- vfp 右键发送邮件_邮件批量发送的方法教程
- java最全基础知识_Java编程入门,计数排序(Counting Sort)怎么做?
- 塑钢瓦图片_塑钢瓦和彩钢瓦哪种好 如何准确选购
- java读取frp_【原创】FRP初探(函数式编程部分)
- 计算机丢失qt4core.dll,qtcore4.;dll文件丢失。怎么办?
- 攻防世界(Pwn)dice_game, 栈溢出覆盖srand种子
- CTF-window和linux下命令执行的知识
- 无线路由器发起ARP攻击,致使网络中断,这是为什么?