打印

可否给一个算法?

[复制链接]
4342|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不亦心|  楼主 | 2009-9-29 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 不亦心 于 2009-9-30 13:28 编辑

要用51单片机**一密码,一时想不到一个收敛比较快的算法,所以来向大家求助。

x1*1+x2*4+x3*16+x4*64=密码

其中32<=x1,x2,x3,x4<=126且均为整数。

显然,满足密码的x1,x2,x3,x4并不止一组,现由单片机不断输入数据试出密码。


这个密码是不知道的,需要用单片机按顺序输入x1,x2,x3,x4,若密码正确,则设备运

行,否者单片机继续输入密码,直至试出密码。

请问这怎么编程能实现。

求一个较快的算法,或给个思路。


另外,这种情况是不适合电脑的,请大家给个思路,谢谢

相关帖子

沙发
bluerain| | 2009-9-29 17:29 | 只看该作者
干吗让单片机计算,用电脑算才快

使用特权

评论回复
板凳
不亦心|  楼主 | 2009-9-29 20:16 | 只看该作者
大家给个思路撒!!!!

使用特权

评论回复
地板
badbird1234| | 2009-9-29 20:31 | 只看该作者
LZ上一个贴子对不起了
这个看能不能帮助你了
不知道我理解的对不 是不是密码给定让你算x1,x2,x3,x4
是不是算出一种还是所有可能呀
还有我好久不算数了不知道我的想法对不
看你的等式我就不爽
先给你减减吧
因为x1*1+x2*4+x3*16+x4*64=密码

其中32<=x1,x2,x3,x4<=126且均为整数


所以设x1=32+a;x2=32+b;x3=32+c;x4=32+d;
=>原式等于a+4b+16c+64d=密码-(32+32*4+32*16+32*64)
0<=a,b,c,d<=94且均为整数
问题简单了 不断的除4取余应该就行了

使用特权

评论回复
5
eagleyjf| | 2009-9-30 10:31 | 只看该作者
这个用单片机算很慢,用电脑算就飞快了

使用特权

评论回复
6
864| | 2009-9-30 11:17 | 只看该作者
4# badbird1234

你好,没明白你的不断除4取余是什么意思,我按照你说的试了一下
(这几个变量应该一眼能看出意思吧)
Temp = PassWord -(32+32*4+32*16+32*64);
d = Temp / 64;
c = Temp % 64 / 16;
b = Temp % 64 % 16 / 4;
a = Temp % 64 % 16 % 4;
这样在给定密码的情况下可以得到一组a,b,c,d
如何做能自动搜出多种值,以什么条件循环,请指点一下 谢谢!

使用特权

评论回复
7
864| | 2009-9-30 11:33 | 只看该作者
4# badbird1234
想了想你的除4取余就是指我用的这个Temp吧,以a,b,c,d的次序算出来,但是多值怎么解决

使用特权

评论回复
8
mbutterfly| | 2009-9-30 12:14 | 只看该作者
算法是思想,汇编和C是实现方式

使用特权

评论回复
9
不亦心|  楼主 | 2009-9-30 13:19 | 只看该作者
呵呵,这种场合不能用电脑。 2# bluerain

使用特权

评论回复
10
不亦心|  楼主 | 2009-9-30 13:20 | 只看该作者
某种场合电脑是不适合的 5# eagleyjf

使用特权

评论回复
11
HWM| | 2009-9-30 13:23 | 只看该作者
“这种场合不能用电脑”

LZ,你漏马脚了。

使用特权

评论回复
12
不亦心|  楼主 | 2009-9-30 13:26 | 只看该作者
x1*1+x2*4+x3*16+x4*64=密码
原式等于a+4b+16c+64d=密码-(32+32*4+32*16+32*64)
上面这两个式子有什么本质区别吗???

可能是我表述不清楚,

这个密码是不知道的,需要用单片机按顺序输入x1,x2,x3,x4,若密码正确,则设备运行,否者单片机继续输入密码,直至试出密码。
4# badbird1234

使用特权

评论回复
13
不亦心|  楼主 | 2009-9-30 13:29 | 只看该作者
帮帮忙撒!!!!

使用特权

评论回复
14
linqing171| | 2009-9-30 13:57 | 只看该作者
10710    2720
1 4 16 64
一个简单的算法
unsigned char a,b,c,d;
a=b=c=d=0;
while(d<=94)
{
     printf("%d%d%d%d\n",a+32,b+32,c+32,d+32);
     if(a<3) a++;
    else {
        a=0;
        if(b<3) b++;
        else
        {
              b=0;
              if(c<3) c++;
              else
              {
                    c=0;
                    d++;
              }
        }
    }
}

使用特权

评论回复
15
linqing171| | 2009-9-30 13:59 | 只看该作者
其中 其中32<=x1,x2,x3,x4<=126且均为整数。
应该修改为:
其中32<=x1,x2,x3<=35且均为整数,32<=x4<=126。
这样将有唯一解。
而且搜索这个唯一解的速度应该会比较快。

使用特权

评论回复
16
badbird1234| | 2009-9-30 14:37 | 只看该作者
理解错了

看来我老人家只能看帖没资格回帖
真不知道现在的年轻人到底要干什么
浪费我10分钟的脑细胞
我还以为我把算式左移减少算式量

你还是把进制玩明白了再提问吧

使用特权

评论回复
17
userchen| | 2009-9-30 14:53 | 只看该作者
这个也没什么算法吧。肯定是和你现在做的功能一样啊。个人觉得。
就是要把x1 x2 x3 x4从32到126一个一个输进去,直到密码正确,除非你能猜。。。

不知道你这个设备的反应速度咋样,是不是密码x1234输进去后要过N秒后才能知道结果。。。。那就没啥意义了。。。。:(

使用特权

评论回复
18
ejack| | 2009-9-30 15:35 | 只看该作者
“不适用电脑”-->手提设备?
加上暴力**密码……OMG,怕怕……

使用特权

评论回复
19
不亦心|  楼主 | 2009-9-30 17:11 | 只看该作者
设备反应速度没问题,纳秒级 17# userchen

使用特权

评论回复
20
不亦心|  楼主 | 2009-9-30 17:16 | 只看该作者
呵呵
别害怕啊,虽是**,但绝对不是非法**

18# ejack

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2993

主题

10032

帖子

212

粉丝