找回密码
 欢迎注册
楼主: wayne

[提问] 关于android手机图案锁屏的计数

[复制链接]
发表于 2013-6-17 22:13:53 | 显示全部楼层
2=>1,3,4,5,6,7,9 3=>2,4,5,6,8 4=>1,2,3,5,7,8,9 5=>1,2,3,4,6,7,8,9
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-6-17 22:15:29 | 显示全部楼层
6=>1,2,3,5,7,8,9 7=>2,4,5,6,8 8=>1,3,4,5,6,7,9 9=>2,4,5,6,8
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-6-18 15:07:10 | 显示全部楼层
不错,这种方法好是好,只是有一种情况没考虑吧。 比如,前面如果已经经过5的话,后面4可以直接跳到6的 参考6#可行方案的2516图 路径{8,5,7,4,6}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-6-18 15:30:48 | 显示全部楼层
待我写个程序来
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-6-18 16:37:48 | 显示全部楼层
  1. #include <stdio.h>
  2. int mask[10] = {1,0,0,0,0,0,0,0,0,0};
  3. int next[10][10] =
  4. {0,0,0,0,0,0,0,0,0,0,
  5. 5,2,4,5,6,8,0,0,0,0,
  6. 7,1,3,4,5,6,7,9,0,0,
  7. 5,2,4,5,6,8,0,0,0,0,
  8. 7,1,2,3,5,7,8,9,0,0,
  9. 8,1,2,3,4,6,7,8,9,0,
  10. 7,1,2,3,5,7,8,9,0,0,
  11. 5,2,4,5,6,8,0,0,0,0,
  12. 7,1,3,4,5,6,7,9,0,0,
  13. 5,2,4,5,6,8,0,0,0,0,
  14. };
  15. int counter[10] = {0,0,0,0,0,0,0,0,0,0};
  16. int graph[10] = {0,0,0,0,0,0,0,0,0,0};
  17. int nextNumber = 0;
  18. int graphPostion = 0;
  19. void first( void )
  20. {
  21. int i;
  22. for (i = 1; i <= 9 ; i ++)
  23. {
  24. mask[i] = 1;
  25. graph[graphPostion] = i;
  26. circle( graphPostion + 1 );
  27. mask[i] = 0;
  28. }
  29. }
  30. void circle( int graphPostion )
  31. {
  32. int i;
  33. int noPostion = 1;
  34. int n = graph[graphPostion - 1];
  35. for (i = 1; i <= next[n][0]; i ++)
  36. {
  37. if (mask[next[n][i]] == 0)
  38. {
  39. noPostion = 0;
  40. mask[next[n][i]] = 1;
  41. graph[graphPostion] = next[n][i];
  42. counter[graphPostion + 1] ++;
  43. circle( graphPostion + 1 );
  44. mask[next[n][i]] = 0;
  45. }
  46. }
  47. if (noPostion)
  48. {
  49. printf("find: ");
  50. for (i = 0; i < graphPostion; i ++)
  51. {
  52. printf("%1d ", graph[i]);
  53. }
  54. printf("\n");
  55. }
  56. }
  57. int main ( void )
  58. {
  59. int i;
  60. first( );
  61. for (i = 4; i <= 9; i ++)
  62. printf("%d: %d\n", i, counter[i]);
  63. return 0;
  64. }
复制代码
4: 1400 5: 5328 6: 16032 7: 35328 8: 49536 9: 32256
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-6-18 17:46:22 | 显示全部楼层
  1. PointsToBeChecked[{{a_,b_},{c_,d_}}]:=Module[{g=GCD[c-a,d-b]},If[g>1,{a+# (c-a)/g,b+# (d-b)/g}&/@Range[g-1],{}]];
  2. n=3;ddd=Flatten[Table[{{i,j}},{i,0,n-1},{j,0,n-1}],1];
  3. Table[{ii,Product[n^2-k,{k,0,ii-1}],ddd=Select[Flatten[Table[Join[ii,List@#]&/@Complement[Flatten[Array[List,{n,n}]-1,1],ii],{ii,ddd}],1],Length[PointsToBeChecked[#[[-2;;-1]]]]==0&];Length[ddd]},{ii,2,n^2}]
复制代码
对算法做了改进,反而跟无心人的答案对上了。 {2, 72, 56}, {3, 504, 304}, {4, 3024, 1400}, {5, 15120, 5328}, {6, 60480, 16032}, {7, 181440, 35328}, {8, 362880, 49536}, {9, 362880, 32256}}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-6-18 21:41:54 | 显示全部楼层
算得4*4的情况: 2,240,172 3,3360,1696 4,43680,15580 5,524160,132264 6,5765760,1029232 7,57657600,7286016 后面就算不动了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-6-19 14:37:53 | 显示全部楼层
证明俺算法没错了哦
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-6-20 13:29:19 | 显示全部楼层
取出所有的排列,然后一个一个地判定!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-6-24 11:29:36 | 显示全部楼层
看了下无心人的程序,能计算#6给出的合法情况吗? 5->2->7->3->4 因为5是已经标记过的,所以可以从7直接到3了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-26 03:16 , Processed in 0.031888 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表