首页 > 试题广场 >

智能手机的手势解锁密码是九宫格3X3的点阵中的一条路径,这条

[单选题]
智能手机的手势解锁密码是九宫格3X3的点阵中的一条路径,这条路 径最少连接四个点,最多连接九个点,请问总共有多少种解锁密码?(    )
  • 1000种量级
  • 10000种量级
  • 100000种量级
  • 500000种以上
// 答案是 389112
// Java 代码如下
 
/*~  *  Created by lemon-clown on 2017/8/25  */ import java.util.Scanner;  /**  *  3*3 的智能机手势密码方案数  */ public class GesturePassword { private static int NUMBERS = 9;  private static final int[][] G = new int[NUMBERS+1][NUMBERS+1];  private static boolean[] visited = new boolean[NUMBERS+1];   static { G[1][3] = G[3][1] = 2;  G[1][7] = G[7][1] = 4;  G[1][9] = G[9][1] = 5;  G[2][8] = G[8][2] = 5;  G[3][7] = G[7][3] = 5;  G[3][9] = G[9][3] = 6;  G[4][6] = G[6][4] = 5;  G[7][9] = G[9][7] = 8;  } /**  *  MIN_NUMBERS: 最少连接点数  *  MAX_NUMBERS: 最多连接点数  */  private static int MIN_NUMBERS;  private static int MAX_NUMBERS;  private static int DFS(int o, int cur) { if( cur > MAX_NUMBERS ) return 0;  int cnt = (cur >= MIN_NUMBERS? 1: 0);   visited[o] = true;  for(int i=1; i <= NUMBERS; ++i) { int target = G[o][i];  if( visited[target] && !visited[i] ) cnt += DFS(i, cur + 1);  } visited[o] = false;  return cnt;  } public static void main(String[] args) { Scanner in = new Scanner(System.in);  while( in.hasNext() ) { MIN_NUMBERS = in.nextInt();  MAX_NUMBERS = in.nextInt();  if( MIN_NUMBERS == 0 && MAX_NUMBERS == 0 ) break;   int ans = DFS(0, 0);  System.out.println(ans);  }
    }
}
发表于 2017-08-25 12:25:42 回复(3)
但是还要考虑同一条线上的数字不能随意更换数字,比如没有1324这样的密码,这样的话会少很多种。
发表于 2017-11-13 13:10:28 回复(2)
根据排列组合原理,该题答案应为
A99+A98+A97+A96+A95+A94,
可求得:
A99=9*8*7*6*5*4*3*2*1=362880,
A98=9*8*7*6*5*4*3*2=362880,
A97=9*8*7*6*5*4*3=181440,
A96=9*8*7*6*5*4=60480,
A95=9*8*7*6*5=15120,
A94=9*8*7*6=3024,
和为985824。
严格来讲C,D都对。
但是我其实只算了A99,想了一下A88,就直接选了D,虽然觉得C应该没错。
现在看了看对C选项的满足也是很惊险。
如有错误肯请指正。
发表于 2017-08-30 16:21:34 回复(15)
不考虑失效的方式(就是不连贯的情况),那么如果9个点的话,排列组合有9!(362880)种,比9少的都达不到9的量级,在减去失效的也不会跨量级,所以是100000的量级,选C
发表于 2017-08-18 11:46:15 回复(2)
转自知乎,算出来答案是30W级别https://www.zhihu.com/question/24905007

发表于 2018-04-09 18:09:11 回复(0)
连接四个点:A(4,9)
连接五个点:A(5,9)
...
连接九个点:A(9,9)
所以结果是:A(4,9) + A(5,9) + ... + A(9,9)吧。
发表于 2017-08-28 17:07:30 回复(4)
计算前两个点,估计第三第四个点,再估计后面的5个点。
前两个点:分三种情况,第一个点可以选中心、四角、边心,各有1个,4个,4个选择,
如果第一个点选中心,下一个点有8个选择;
如果第一个点选四角,下一个点有3个选择;
如果第一个点选边心,下一个点有5个选择;
也就是说,前两个点一共有8+4*3+4*5=40个;
再算第三第四个点,还要继续分情况就很多了,只做估计,第三个点和第四个点大约都有5个选择(取上面选第二个点时比较折中的数字)
于是有40*25=1000个情况组成长度为4的路径(估计值)
下面再估计后面的五个点,有可能被选中也有可能不被选中,大约2的5次方,64
于是估计有64000,蒙C
对,B和C,就是蒙

发表于 2018-04-10 16:01:41 回复(0)
D
发表于 2017-10-11 23:18:46 回复(0)
应该不能选点,否则很多点实际上是不能相邻的,而是把所有可能出现的边连起来,这样去算就是100000量级的。
发表于 2019-07-27 20:03:43 回复(0)
排除法
发表于 2018-12-06 20:23:11 回复(0)
我觉得不该按排列组合考虑,应为下一点不能随机选择,只能选择相邻的位置,所以c是正确的
发表于 2018-08-06 22:52:51 回复(0)
9的阶乘级别
发表于 2018-03-12 14:39:40 回复(0)
算了下A(4,9) 选了B 应该算A99 其他不用算我擦。
2018年3月12日12:46:39

A(4,9)  但是有的四个点连不起来 ,只有相邻的才可以,否则会跨过其他点,不满足4个,以此类推,所以结果应该小于D 
编辑于 2018-03-12 12:47:52 回复(0)
从9个点中选9个的次数不是A99,而是8次…其他同理,所以是c
发表于 2017-12-01 10:23:05 回复(1)
A99(9*8*7*...*2*1) + A98(9*8*7*...*2*1) +.. + A94(9*8*7*6) = 985824 C
发表于 2017-10-23 16:28:05 回复(1)
TM,只需要考虑量级,我还专门计算其结果:6234480
发表于 2017-08-23 14:11:45 回复(3)
考虑最多量级
发表于 2017-08-21 12:33:26 回复(0)