| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3488 人关注过本帖
标题:九宫解锁一共有多少种解法?
只看楼主 加入收藏
想念遇见
Rank: 2
等 级:论坛游民
帖 子:87
专家分:74
注 册:2012-5-10
收藏
得分:0 
回复 10楼 azzbcc
好吧!其实我还没仔细看,你在看看吧!我觉得这个确实有点乱!
2013-05-16 12:18
想念遇见
Rank: 2
等 级:论坛游民
帖 子:87
专家分:74
注 册:2012-5-10
收藏
得分:0 
不要沉啊!大神们再看看!
2013-05-21 08:48
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 12楼 想念遇见
你倒是说说九宫的规则啊。
2013-05-21 11:22
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
虽然我的手机有这个功能,但从没用过,一直是滑动解锁的。

要分析这个问题,首先得明确九宫解锁图案的构成规则,我尝试了一下,大概总结规则如下:

1.连接点的线段是直线
2.每个点只允许经过一次,不允许作为多条直线的端点,这也意味着不能形成闭合的解锁图案
3.连接两点的直线不能经过尚未连接过的点,但可以经过已经参与过连接的点
4.每个图案包含的点数不能小于4

由这些规则可以估算总的可能图案数量不超过9! * 9(这是个粗略的范围,实际应该远小于这个数值),也就几百万种,所以穷举也不会花很多时间。

重剑无锋,大巧不工
2013-05-21 11:38
想念遇见
Rank: 2
等 级:论坛游民
帖 子:87
专家分:74
注 册:2012-5-10
收藏
得分:0 
回复 13楼 czz5242199
楼下说了,一般现在的手机都有吧!如果你的手机没那个功能,可以看一下别人的手机,这个不好解释,但你一看手机就明白了
2013-05-22 23:20
蔡明耀
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2012-12-8
收藏
得分:0 
应该是用排列组合的数学思想
2013-05-23 18:54
想念遇见
Rank: 2
等 级:论坛游民
帖 子:87
专家分:74
注 册:2012-5-10
收藏
得分:0 
大神们,都想想啊!还没结帖,不要沉了!
2013-05-29 22:52
yctchxf
Rank: 6Rank: 6
来 自:盐城
等 级:侠之大者
威 望:2
帖 子:176
专家分:454
注 册:2012-4-10
收藏
得分:0 
好长时间都没来了
2013-05-29 23:36
moonnight
Rank: 5Rank: 5
等 级:职业侠客
帖 子:158
专家分:380
注 册:2012-3-17
收藏
得分:0 
程序代码:
#include <stdio.h>

int count;

int keda(int a,int cur,int s[])   //判断新的点和上一个点是否可以到达
{
    int b=s[cur-1];
    int ax,ay,bx,by;
    ax=a/3;ay=a%3;
    bx=b/3;by=b%3;

    int dis=(ax-bx)*(ax-bx)+(ay-by)*(ay-by);   //dis是距离的平方

    if(dis==1||dis==2||dis==5)
        return 1;
    if(dis==4||dis==8)
    {
        int zx,zy;
        zx=(ax+bx)/2;
        zy=(ay+by)/2;
        int ok=0;
        for(int h=0;h<cur;h++)
            if((zx*3+zy)==s[h])
                ok=1;
        if(ok==1)
            return 1;
    }
   

    return 0;
}

void pailie(int s[],int cur)
{
    if(cur>=4)
    {
        /*for(int m=0;m<cur;m++)
            printf("%d ",s[m]+1);
        putchar('\n');*/
        count++;
    }
    for(int i=0;i<9;i++)
    {
        if(!cur)
        {
            s[cur]=i;
            pailie(s,cur+1);
        }
        else
        {
            int ok=1;
            for(int j=0;j<cur;j++)
                if(i==s[j])
                    ok=0;
            if(ok && keda(i,cur,s))
            {
                s[cur]=i;
                pailie(s,cur+1);
            }
        }
    }
}

int main()
{
    int s[10];    //s保存已经用过的点
    int cur=0;    //cur记录s中点的数目

    pailie(s,cur);

    printf("%d",count);
   

   

    return 0;
}
2013-10-17 22:54
moonnight
Rank: 5Rank: 5
等 级:职业侠客
帖 子:158
专家分:380
注 册:2012-3-17
收藏
得分:0 
好早的帖子,,,好久没来过的论坛
2013-10-17 23:12
快速回复:九宫解锁一共有多少种解法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018658 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved