首页
社区
课程
招聘
终于跟踪分析出算法了
发表于: 2005-1-23 09:00 17615

终于跟踪分析出算法了

2005-1-23 09:00
17615

非常感谢大家,是你们的鼓励,让我不厌其烦地多次细致地跟踪分析,终于得出了算法。

真正尝到了破解的辛酸苦辣!

现在是到了写注册机的时候了,但有了个问题,请大家帮助。

算法是这样的:

密码是一个8位数,要求符合:

(百万位数 - 十万位数)*1000  + (个位数 - 千万位数)*100 + (百位数 - 千位数)*10 + 万位数 - 十位数 =123

如何求得此8位整数?列出全部符合条件的8位数

我摸索了好长时间,没能写出,请大家帮助我看看。

我只能用循环语句进行穷举,但太慢了,不符合常理。

小弟太菜了。盼!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (30)
雪    币: 209
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
除了穷举,还有其他方法吗?
2005-1-23 09:47
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
3
百万位=十万位
个位=千万位+1
百位=千位+2
万位=十位+3

穷举四位就可以了,这样不算很慢。
2005-1-23 11:04
0
雪    币: 209
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢!太谢谢了!
2005-1-23 11:06
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
5
不对不对,还有相减为负的情况,有点麻烦了……

不过为什么非得把所有的都求出来呢?
2005-1-23 11:20
0
雪    币: 280
活跃值: (281)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
6
构造数字:0*1000+1*100+2*10+3=123
2005-1-23 11:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
为什么要穷举呢?
只要部分都行
2005-1-23 11:37
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
int main(int argc, char *argv[])
{
	int a,b,c,d,e,f,g,h;
	int key;
	long i;
	printf("有效的序列号:\n");
	for (i=10000000;i<=99999999 ; i++)
	{
		a=i/10000000%10;
		b=i/1000000%10;
		c=i/100000%10;
		d=i/10000%10;
		e=i/1000%10;
		f=i/100%10;
		g=i/10 %10;
		h=i%10;
key= (b-c)*1000+(h-a)*100+(f-e)*10+d-g;
 if (key==123)
 {
	 printf("%d\n",i);
 }
	}
return 0;
}


共8887个耗时41秒计算比你的穷举快多了
下面是算出来的序列号
附件:key.rar
2005-1-23 12:44
0
雪    币: 209
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
太感谢各位!谢谢
2005-1-23 12:59
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 larblue 发布
[CODE]
int main(int argc, char *argv[])
{
int a,b,c,d,e,f,g,h;
int key;
........


兄弟的代码也是穷举啊,范围从10000000到99999999
2005-1-25 02:18
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
11
设:
百万位数a,十万位数b,个位数c,千万位数d,百位数e,千位数f,万位数g,十位数h

那么问题等价于求
(a-b)*1000+(c-d)*100+(e-f)*10+(g-h)=123
的所有解,其中所有未知数取值范围是0~9

上式可以写成:
(a*1000+c*100+e*10+g)-(b*1000+d*100+f*10+h)=123

设:x=a*1000+c*100+e*10+g , y=b*1000+d*100+f*10+h

那么方程为x-y=123,其中x,y都是4位整数,这样就可以看成两个4位数相减

不知道有没有百万位!=0的要求,这里假设没有

那么y=x+123,定义域是0~9876,值域是123~9999

求出所有的(x,y),这样就知道abcdefgh,交换位置重新排列即可

个数为9877个,如果考虑百万位!=0还要少1000个左右,结果和larbule兄弟的应该差不多
2005-1-27 22:33
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
强,学习了
2005-3-1 11:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好东西,谢谢分享
2005-5-1 13:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
强,学了不少!
2005-5-1 14:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
厉害 ,学习
2005-5-7 23:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
看完有点收获,谢谢!
2005-5-20 11:13
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我觉得还可以优化:
设这个数是hgfedcba,那么:
1000(g-f)+100(a-h)+10(c-d)+(e-b)=123
设 M=g-f  N=a-h  I=c-d J=e-b (-10<M,N,I,J<10,是整数(-9,-8,...8,9))
那么:M=0,1
|_M=0时:100(a-h)+10(c-d)+(e-b)=123
| |_N=1,2
| |__N=1: 10I+J=23 -> (I,J)={(2,3),(3,-7)}
| |__N=2: 10I+J=-77 -> (I,J)={(-7,-7),(-8,3)}
|
|_M=1时:100(a-h)+10(c-d)+(e-b)=-877
  |_N=-8:  10I+J=-77 -> (I,J)={(-7,-7),(-8,3)}
  |_N=-9:  10I+J=23 -> (I,J)={(2,3),(3,-7)}
于是(M,N,I,J)一共有这么几中情况:
(0,1,2,3)
(0,1,3,-7)
(0,1,-7,-7)
(0,1,-8,3)
(1,-8,-7,-7)
(1,-8,-8,3)
(1,-8,2,3)
(1,-8,3,-7)
从 M=g-f  N=a-h  I=c-d J=e-b
就很好找了吧:
g=f,a-h=1,c-d=2,e-b=3;
或.....
或.....
好了,把结果一组合,简单多了。
2005-6-26 17:41
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我觉的没分析错吧?
这样一看,结果还不少呢!
2005-6-26 17:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
算出来的怎么都是按顺序呀~~!
何意思呀。不大懂啊~~!
2005-8-7 00:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不懂你写些什么?????
2005-8-8 21:20
0
雪    币: 419
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
goooooooooood
2005-8-23 19:51
0
雪    币: 419
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
看完有点收获,谢谢!
2005-8-23 19:51
0
雪    币: 419
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
看完有点收获,谢谢!!!!!!!!!!
2005-8-23 19:52
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
好好学习,真强
2005-10-17 19:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
这才是交流。
2005-11-10 22:46
0
游客
登录 | 注册 方可回帖
返回
//