能力值:
( LV2,RANK:10 )
|
-
-
2 楼
除了穷举,还有其他方法吗?
|
能力值:
( LV12,RANK:650 )
|
-
-
3 楼
百万位=十万位
个位=千万位+1
百位=千位+2
万位=十位+3
穷举四位就可以了,这样不算很慢。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢!太谢谢了!
|
能力值:
( LV12,RANK:650 )
|
-
-
5 楼
不对不对,还有相减为负的情况,有点麻烦了……
不过为什么非得把所有的都求出来呢?
|
能力值:
( LV9,RANK:250 )
|
-
-
6 楼
构造数字:0*1000+1*100+2*10+3=123
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
为什么要穷举呢?
只要部分都行
|
能力值:
( 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
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
太感谢各位!谢谢
|
能力值:
( 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
|
能力值:
( 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兄弟的应该差不多
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
好东西,谢谢分享
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
强,学了不少!
|
能力值:
( 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;
或.....
或.....
好了,把结果一组合,简单多了。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
我觉的没分析错吧?
这样一看,结果还不少呢!
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
算出来的怎么都是按顺序呀~~!
何意思呀。不大懂啊~~!
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
不懂你写些什么?????
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
goooooooooood
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
看完有点收获,谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
看完有点收获,谢谢!!!!!!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
好好学习,真强
|