判断手势_手势密码有几种?
前幾天想到一個(gè)有趣的問題,我們每個(gè)手機(jī)都可以設(shè)置手勢密碼,那么手勢密碼一共有幾種呢?
我們先了解下手勢密碼設(shè)置的規(guī)則:密碼必須不小于4個(gè)點(diǎn),點(diǎn)在第一次經(jīng)過時(shí)不允許被跳過。
如圖,我們把每個(gè)點(diǎn)編上序號。
則以下這種是不合法的。
5被連接了兩次
而
這種是合法的,因?yàn)?被跳過了。而被跳過的點(diǎn)不被記為總點(diǎn)數(shù)。
用數(shù)字表示的話,例如1923則不能為四個(gè)點(diǎn)連接的情況,因?yàn)?和9之間有5,所以實(shí)際上是15923。
如果用純理性分析的話,這無疑是個(gè)極為復(fù)雜的數(shù)學(xué)題,很多數(shù)學(xué)技巧似乎都被限制住。但是,我們有計(jì)算機(jī)這個(gè)無比強(qiáng)大的工具。這里,我選擇用C語言處理。
宏定義
#define SIZE 10000 #define XSIZE 5 #define SIZEX 11111以五個(gè)數(shù)字組成的密碼舉例,SIZE為
,XSIZE為位數(shù),SIZEX為起始的窮舉數(shù)字。這樣通過改變?nèi)齻€(gè)變量,能得到不同的組合的個(gè)數(shù)。主函數(shù)部分
void main(){int n = 0;int i = SIZEX, j = 0;for (i; i < SIZE*10; i++) {if(check(i)) n++;}printf("%d",n); }主函數(shù)部分十分簡單,就是簡單的循環(huán)遍歷。
check函數(shù)部分
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; }該函數(shù)大致分為三個(gè)部分,第一部分,對傳入的i分離i的各個(gè)位數(shù)的數(shù)字,并存入數(shù)組中。第二部分,設(shè)置兩個(gè)循環(huán)判斷數(shù)組中是否有相同的數(shù)字,第三部分,設(shè)置循環(huán),遍歷相鄰的兩個(gè)數(shù)字,判斷這兩個(gè)數(shù)字是否滿足可能非法的條件,即兩個(gè)數(shù)字間是否包含第三個(gè)數(shù)字,然后傳入check1函數(shù),判斷兩個(gè)數(shù)字前是否有中間包含的第三個(gè)數(shù)字,存在的話說明是合法的。
check1函數(shù)
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; }結(jié)論
運(yùn)行程序,發(fā)現(xiàn)各個(gè)數(shù)字的個(gè)數(shù),其中
4位的有1624個(gè)
5位的有7152個(gè)
6位的有26016個(gè)
7位的有72912個(gè)
8位的有140704個(gè)
9位的有140704個(gè)
總共有389112種!
值得一提的是,6位以下的個(gè)數(shù)甚至每到10000種,所以設(shè)置密碼最好設(shè)置6位以上的,當(dāng)然不怕忘記的話,可以設(shè)置9位的變態(tài)密碼。
完。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的判断手势_手势密码有几种?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js获取下月时间_js 获取日期时间段
- 下一篇: jquery 乱码 传参_jquery获