紫罗兰算式(数学代数方面的)
紫罗兰算式(数学代数方面的)设第一个数是“CLOVER”;
第二个数是“CROCUS”;
第三个数是“VIOLET”;
其中第一个数与第二个数的和是第三个数,
注意:相同的字母表示同一个数字,不同的字母
表示不同的数字。每个字母的取值是从0到9的整数。
来源于《读者》杂志2010年第17期。
如何求解呢?
或许用什么编程求解呢?我需要的是一个过程。
其实我已经把这题算出来了,但是耗费了
四五页这样的草稿纸和上千次的逻辑判断,
我想找到更简单的办法。
不知道谁能解决呢?
答案:
CLOVER=280516
CROCUS=260297
VIOLET=540813
这个答案是我自己算出来的,但是要是整理
起过程应该很乱的。所以想用程序的办法解决。 当然,最笨的办法就是使用10层循环,但是那个似乎太笨了,我觉得不采用为好! 无奈之下,本人采用0-1规划,使用lingo8.0求解,其代码如下,由于本人不会使用集语言,所以代码复杂了那么些。
x0101*1+x0102*2+x0103*3+x0104*4+x0105*5+x0106*6+x0107*7+x0108*8+x0109*9+x0110*0=C;
x0201*1+x0202*2+x0203*3+x0204*4+x0205*5+x0206*6+x0207*7+x0208*8+x0209*9+x0210*0=L;
x0301*1+x0302*2+x0303*3+x0304*4+x0305*5+x0306*6+x0307*7+x0308*8+x0309*9+x0310*0=O;
x0401*1+x0402*2+x0403*3+x0404*4+x0405*5+x0406*6+x0407*7+x0408*8+x0409*9+x0410*0=V;
x0501*1+x0502*2+x0503*3+x0504*4+x0505*5+x0506*6+x0507*7+x0508*8+x0509*9+x0510*0=E;
x0601*1+x0602*2+x0603*3+x0604*4+x0605*5+x0606*6+x0607*7+x0608*8+x0609*9+x0610*0=R;
x0701*1+x0702*2+x0703*3+x0704*4+x0705*5+x0706*6+x0707*7+x0708*8+x0709*9+x0710*0=U;
x0801*1+x0802*2+x0803*3+x0804*4+x0805*5+x0806*6+x0807*7+x0808*8+x0809*9+x0810*0=S;
x0901*1+x0902*2+x0903*3+x0904*4+x0905*5+x0906*6+x0907*7+x0908*8+x0909*9+x0910*0=I;
x1001*1+x1002*2+x1003*3+x1004*4+x1005*5+x1006*6+x1007*7+x1008*8+x1009*9+x1010*0=T;
x0101+x0102+x0103+x0104+x0105+x0106+x0107+x0108+x0109+x0110=1;
x0201+x0202+x0203+x0204+x0205+x0206+x0207+x0208+x0209+x0210=1;
x0301+x0302+x0303+x0304+x0305+x0306+x0307+x0308+x0309+x0310=1;
x0401+x0402+x0403+x0404+x0405+x0406+x0407+x0408+x0409+x0410=1;
x0501+x0502+x0503+x0504+x0505+x0506+x0507+x0508+x0509+x0510=1;
x0601+x0602+x0603+x0604+x0605+x0606+x0607+x0608+x0609+x0610=1;
x0701+x0702+x0703+x0704+x0705+x0706+x0707+x0708+x0709+x0710=1;
x0801+x0802+x0803+x0804+x0805+x0806+x0807+x0808+x0809+x0810=1;
x0901+x0902+x0903+x0904+x0905+x0906+x0907+x0908+x0909+x0910=1;
x1001+x1002+x1003+x1004+x1005+x1006+x1007+x1008+x1009+x1010=1;
x0101+x0201+x0301+x0401+x0501+x0601+x0701+x0801+x0901+x1001=1;
x0102+x0202+x0302+x0402+x0502+x0602+x0702+x0802+x0902+x1002=1;
x0103+x0203+x0303+x0403+x0503+x0603+x0703+x0803+x0903+x1003=1;
x0104+x0204+x0304+x0404+x0504+x0604+x0704+x0804+x0904+x1004=1;
x0105+x0205+x0305+x0405+x0505+x0605+x0705+x0805+x0905+x1005=1;
x0106+x0206+x0306+x0406+x0506+x0606+x0706+x0806+x0906+x1006=1;
x0107+x0207+x0307+x0407+x0507+x0607+x0707+x0807+x0907+x1007=1;
x0108+x0208+x0308+x0408+x0508+x0608+x0708+x0808+x0908+x1008=1;
x0109+x0209+x0309+x0409+x0509+x0609+x0709+x0809+x0909+x1009=1;
x0110+x0210+x0310+x0410+x0510+x0610+x0710+x0810+x0910+x1010=1;
num01=10^5*C+10^4*L+10^3*O+10^2*V+10*E+R;
num02=10^5*C+10^4*R+10^3*O+10^2*C+10*U+S;
num03=10^5*V+10^4*I+10^3*O+10^2*L+10*E+T;
num01+num02-num03=num04;
min=num04;
@gin(x0101);@gin(x0102);@gin(x0103);@gin(x0104);@gin(x0105);@gin(x0106);@gin(x0107);@gin(x0108);@gin(x0109);@gin(x0110);
@gin(x0201);@gin(x0202);@gin(x0203);@gin(x0204);@gin(x0205);@gin(x0206);@gin(x0207);@gin(x0208);@gin(x0209);@gin(x0210);
@gin(x0301);@gin(x0302);@gin(x0303);@gin(x0304);@gin(x0305);@gin(x0306);@gin(x0307);@gin(x0308);@gin(x0309);@gin(x0310);
@gin(x0401);@gin(x0402);@gin(x0403);@gin(x0404);@gin(x0405);@gin(x0406);@gin(x0407);@gin(x0408);@gin(x0409);@gin(x0410);
@gin(x0501);@gin(x0502);@gin(x0503);@gin(x0504);@gin(x0505);@gin(x0506);@gin(x0507);@gin(x0508);@gin(x0509);@gin(x0510);
@gin(x0601);@gin(x0602);@gin(x0603);@gin(x0604);@gin(x0605);@gin(x0606);@gin(x0607);@gin(x0608);@gin(x0609);@gin(x0610);
@gin(x0701);@gin(x0702);@gin(x0703);@gin(x0704);@gin(x0705);@gin(x0706);@gin(x0707);@gin(x0708);@gin(x0709);@gin(x0710);
@gin(x0801);@gin(x0802);@gin(x0803);@gin(x0804);@gin(x0805);@gin(x0806);@gin(x0807);@gin(x0808);@gin(x0809);@gin(x0810);
@gin(x0901);@gin(x0902);@gin(x0903);@gin(x0904);@gin(x0905);@gin(x0906);@gin(x0907);@gin(x0908);@gin(x0909);@gin(x0910);
@gin(x1001);@gin(x1002);@gin(x1003);@gin(x1004);@gin(x1005);@gin(x1006);@gin(x1007);@gin(x1008);@gin(x1009);@gin(x1010); 求解结果,只需要看其中的C L O等值。迭代了437677次,已经算是不少了,真的比较多了
Global optimal solution found at iteration: 437677
Objective value: 0.000000
Variable Value Reduced Cost
X0101 0.000000 0.000000
X0102 1.000000 0.000000
X0103 0.000000 0.000000
X0104 0.000000 0.000000
X0105 0.000000 0.000000
X0106 0.000000 0.000000
X0107 0.000000 0.000000
X0108 0.000000 0.000000
X0109 0.000000 0.000000
X0110 0.000000 0.000000
C 2.000000 0.000000
X0201 0.000000 0.000000
X0202 0.000000 0.000000
X0203 0.000000 0.000000
X0204 0.000000 0.000000
X0205 0.000000 0.000000
X0206 0.000000 0.000000
X0207 0.000000 0.000000
X0208 1.000000 0.000000
X0209 0.000000 0.000000
X0210 0.000000 0.000000
L 8.000000 0.000000
X0301 0.000000 0.000000
X0302 0.000000 0.000000
X0303 0.000000 0.000000
X0304 0.000000 0.000000
X0305 0.000000 0.000000
X0306 0.000000 0.000000
X0307 0.000000 0.000000
X0308 0.000000 0.000000
X0309 0.000000 0.000000
X0310 1.000000 0.000000
O 0.000000 0.000000
X0401 0.000000 0.000000
X0402 0.000000 0.000000
X0403 0.000000 0.000000
X0404 0.000000 0.000000
X0405 1.000000 0.000000
X0406 0.000000 0.000000
X0407 0.000000 0.000000
X0408 0.000000 0.000000
X0409 0.000000 0.000000
X0410 0.000000 0.000000
V 5.000000 0.000000
X0501 1.000000 0.000000
X0502 0.000000 0.000000
X0503 0.000000 0.000000
X0504 0.000000 0.000000
X0505 0.000000 0.000000
X0506 0.000000 0.000000
X0507 0.000000 0.000000
X0508 0.000000 0.000000
X0509 0.000000 0.000000
X0510 0.000000 0.000000
E 1.000000 0.000000
X0601 0.000000 0.000000
X0602 0.000000 0.000000
X0603 0.000000 0.000000
X0604 0.000000 0.000000
X0605 0.000000 0.000000
X0606 1.000000 0.000000
X0607 0.000000 0.000000
X0608 0.000000 0.000000
X0609 0.000000 0.000000
X0610 0.000000 0.000000
R 6.000000 0.000000
X0701 0.000000 0.000000
X0702 0.000000 0.000000
X0703 0.000000 0.000000
X0704 0.000000 0.000000
X0705 0.000000 0.000000
X0706 0.000000 0.000000
X0707 0.000000 0.000000
X0708 0.000000 0.000000
X0709 1.000000 0.000000
X0710 0.000000 0.000000
U 9.000000 0.000000
X0801 0.000000 0.000000
X0802 0.000000 0.000000
X0803 0.000000 0.000000
X0804 0.000000 0.000000
X0805 0.000000 0.000000
X0806 0.000000 0.000000
X0807 1.000000 0.000000
X0808 0.000000 0.000000
X0809 0.000000 0.000000
X0810 0.000000 0.000000
S 7.000000 0.000000
X0901 0.000000 0.000000
X0902 0.000000 0.000000
X0903 0.000000 0.000000
X0904 1.000000 0.000000
X0905 0.000000 0.000000
X0906 0.000000 0.000000
X0907 0.000000 0.000000
X0908 0.000000 0.000000
X0909 0.000000 0.000000
X0910 0.000000 0.000000
I 4.000000 0.000000
X1001 0.000000 0.000000
X1002 0.000000 0.000000
X1003 1.000000 0.000000
X1004 0.000000 0.000000
X1005 0.000000 0.000000
X1006 0.000000 0.000000
X1007 0.000000 0.000000
X1008 0.000000 0.000000
X1009 0.000000 0.000000
X1010 0.000000 0.000000
T 3.000000 0.000000
NUM01 280516.0 0.000000
NUM02 260297.0 0.000000
NUM03 540813.0 0.000000
NUM04 0.000000 1.000000
Row Slack or Surplus Dual Price
1 0.000000 0.000000
2 0.000000 0.000000
3 0.000000 0.000000
4 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 0.000000
7 0.000000 0.000000
8 0.000000 0.000000
9 0.000000 0.000000
10 0.000000 0.000000
11 0.000000 0.000000
12 0.000000 0.000000
13 0.000000 0.000000
14 0.000000 0.000000
15 0.000000 0.000000
16 0.000000 0.000000
17 0.000000 0.000000
18 0.000000 0.000000
19 0.000000 0.000000
20 0.000000 0.000000
21 0.000000 0.000000
22 0.000000 0.000000
23 0.000000 0.000000
24 0.000000 0.000000
25 0.000000 0.000000
26 0.000000 0.000000
27 0.000000 0.000000
28 0.000000 0.000000
29 0.000000 0.000000
30 0.000000 0.000000
31 0.000000 0.000000
32 0.000000 0.000000
33 0.000000 0.000000
34 0.000000 0.000000
35 0.000000 -1.000000 三个单词在相同位置处都是O。于是说明O只可能是0
问题于是便拆成了两个等式 哦,不对,O还可以是9 显然是多重背包问题,没有“高效”解
虽然可以一眼看出c<5,但这种优化未触及本质
同样显然的还有e的值是任意的 1、U=9,O=0
由E+U=E得知, R+S=T+10 ,U=9,所以O=0
2、C=1或2
因为L=V+C+1,V=2C或者2C+1,所以 3C+1或3C+2 消小于9,即C=1或2
3、L+R必定进位,即L+R=10+I
如若不然,L+R=I,由R+S=T+10得知,R>T,S>T,C为1或2,0,9又被占去了,所以R只能大于等于3了。
如果R=3,那么S只能为8,T为1,于是C为2,所以L=7,再由 L+R=I得知无解。
R大于等于4的话,就更无解了。
=================================================
由以上三点,列式子:
3C+2=L
2C+1=V
R+S=10+T
3C+2+T=10+I
这个时候,分C=1和2两种情况,很快得到楼主给的解了 本帖最后由 mathematica 于 2010-8-16 19:53 编辑
上面的求解结果是我用lingo 8.0求解的,不过现在本人今天学会了lingo的集语言,所以又使用lingo11.0求解,结果真的快了很多很多呀!真的不敢相信!!!!!!!!!!
使用0/1规划来求解这个问题:
程序如下:
model:
sets:
lie/1..10/:shuzi;!行标题是10个数字,按行排放在表的上侧;
hang/C,L,O,V,E,R,U,S,I,T/:zimu;!列标题10个字母,按列排放在表的左侧;
links(hang,lie):bianliang;!形成100个变量;
endsets
data:
shuzi=1,2,3,4,5,6,7,8,9,0;
enddata
!表的每行变量的求和都是1,用来使得每个字母只被分到一个数字去;
@for(hang(i):@sum(lie(j):bianliang(i,j))=1);
!表的每列变量的求和都是1,用来保证使得每个数字只接收一个字母;
@for(lie(j):@sum(hang(i):bianliang(i,j))=1);
!每行字母所得到的数字;
@for(hang(i):@sum(lie(j):bianliang(i,j)*shuzi(j))=zimu(i));
!每个变量都是0/1变量;
@for(links(i,j):@bin(bianliang(i,j)));
!形成第一个数字;
num01=10^5*zimu(1)+10^4*zimu(2)+10^3*zimu(3)+100*zimu(4)+10*zimu(5)+zimu(6);
!形成第二个数字;
num02=10^5*zimu(1)+10^4*zimu(6)+10^3*zimu(3)+100*zimu(1)+10*zimu(7)+zimu(8);
!形成第三个数字;
num03=10^5*zimu(4)+10^4*zimu(9)+10^3*zimu(3)+100*zimu(2)+10*zimu(5)+zimu(10);
num01+num02-num03=0;
min=num01;
end 上面求解的是最小值,求解结果如下,lingo11.0计算了40秒,还算是很快的了!:
Global optimal solution found.
Objective value: 280516.0
Objective bound: 280516.0
Infeasibilities: 0.000000
Extended solver steps: 23417
Total solver iterations: 194083
Variable Value Reduced Cost
NUM01 280516.0 0.000000
NUM02 260297.0 0.000000
NUM03 540813.0 0.000000
SHUZI( 1) 1.000000 0.000000
SHUZI( 2) 2.000000 0.000000
SHUZI( 3) 3.000000 0.000000
SHUZI( 4) 4.000000 0.000000
SHUZI( 5) 5.000000 0.000000
SHUZI( 6) 6.000000 0.000000
SHUZI( 7) 7.000000 0.000000
SHUZI( 8) 8.000000 0.000000
SHUZI( 9) 9.000000 0.000000
SHUZI( 10) 0.000000 0.000000
ZIMU( C) 2.000000 0.000000
ZIMU( L) 8.000000 0.000000
ZIMU( O) 0.000000 0.000000
ZIMU( V) 5.000000 0.000000
ZIMU( E) 1.000000 0.000000
ZIMU( R) 6.000000 0.000000
ZIMU( U) 9.000000 0.000000
ZIMU( S) 7.000000 0.000000
ZIMU( I) 4.000000 0.000000
ZIMU( T) 3.000000 0.000000
BIANLIANG( C, 1) 0.000000 100000.0
BIANLIANG( C, 2) 1.000000 200000.0
BIANLIANG( C, 3) 0.000000 300000.0
BIANLIANG( C, 4) 0.000000 400000.0
BIANLIANG( C, 5) 0.000000 500000.0
BIANLIANG( C, 6) 0.000000 600000.0
BIANLIANG( C, 7) 0.000000 700000.0
BIANLIANG( C, 8) 0.000000 800000.0
BIANLIANG( C, 9) 0.000000 900000.0
BIANLIANG( C, 10) 0.000000 0.000000
BIANLIANG( L, 1) 0.000000 10000.00
BIANLIANG( L, 2) 0.000000 20000.00
BIANLIANG( L, 3) 0.000000 30000.00
BIANLIANG( L, 4) 0.000000 40000.00
BIANLIANG( L, 5) 0.000000 50000.00
BIANLIANG( L, 6) 0.000000 60000.00
BIANLIANG( L, 7) 0.000000 70000.00
BIANLIANG( L, 8) 1.000000 80000.00
BIANLIANG( L, 9) 0.000000 90000.00
BIANLIANG( L, 10) 0.000000 0.000000
BIANLIANG( O, 1) 0.000000 1000.000
BIANLIANG( O, 2) 0.000000 2000.000
BIANLIANG( O, 3) 0.000000 3000.000
BIANLIANG( O, 4) 0.000000 4000.000
BIANLIANG( O, 5) 0.000000 5000.000
BIANLIANG( O, 6) 0.000000 6000.000
BIANLIANG( O, 7) 0.000000 7000.000
BIANLIANG( O, 8) 0.000000 8000.000
BIANLIANG( O, 9) 0.000000 9000.000
BIANLIANG( O, 10) 1.000000 0.000000
BIANLIANG( V, 1) 0.000000 100.0000
BIANLIANG( V, 2) 0.000000 200.0000
BIANLIANG( V, 3) 0.000000 300.0000
BIANLIANG( V, 4) 0.000000 400.0000
BIANLIANG( V, 5) 1.000000 500.0000
BIANLIANG( V, 6) 0.000000 600.0000
BIANLIANG( V, 7) 0.000000 700.0000
BIANLIANG( V, 8) 0.000000 800.0000
BIANLIANG( V, 9) 0.000000 900.0000
BIANLIANG( V, 10) 0.000000 0.000000
BIANLIANG( E, 1) 1.000000 10.00000
BIANLIANG( E, 2) 0.000000 20.00000
BIANLIANG( E, 3) 0.000000 30.00000
BIANLIANG( E, 4) 0.000000 40.00000
BIANLIANG( E, 5) 0.000000 50.00000
BIANLIANG( E, 6) 0.000000 60.00000
BIANLIANG( E, 7) 0.000000 70.00000
BIANLIANG( E, 8) 0.000000 80.00000
BIANLIANG( E, 9) 0.000000 90.00000
BIANLIANG( E, 10) 0.000000 0.000000
BIANLIANG( R, 1) 0.000000 1.000000
BIANLIANG( R, 2) 0.000000 2.000000
BIANLIANG( R, 3) 0.000000 3.000000
BIANLIANG( R, 4) 0.000000 4.000000
BIANLIANG( R, 5) 0.000000 5.000000
BIANLIANG( R, 6) 1.000000 6.000000
BIANLIANG( R, 7) 0.000000 7.000000
BIANLIANG( R, 8) 0.000000 8.000000
BIANLIANG( R, 9) 0.000000 9.000000
BIANLIANG( R, 10) 0.000000 0.000000
BIANLIANG( U, 1) 0.000000 0.000000
BIANLIANG( U, 2) 0.000000 0.000000
BIANLIANG( U, 3) 0.000000 0.000000
BIANLIANG( U, 4) 0.000000 0.000000
BIANLIANG( U, 5) 0.000000 0.000000
BIANLIANG( U, 6) 0.000000 0.000000
BIANLIANG( U, 7) 0.000000 0.000000
BIANLIANG( U, 8) 0.000000 0.000000
BIANLIANG( U, 9) 1.000000 0.000000
BIANLIANG( U, 10) 0.000000 0.000000
BIANLIANG( S, 1) 0.000000 0.000000
BIANLIANG( S, 2) 0.000000 0.000000
BIANLIANG( S, 3) 0.000000 0.000000
BIANLIANG( S, 4) 0.000000 0.000000
BIANLIANG( S, 5) 0.000000 0.000000
BIANLIANG( S, 6) 0.000000 0.000000
BIANLIANG( S, 7) 1.000000 0.000000
BIANLIANG( S, 8) 0.000000 0.000000
BIANLIANG( S, 9) 0.000000 0.000000
BIANLIANG( S, 10) 0.000000 0.000000
BIANLIANG( I, 1) 0.000000 0.000000
BIANLIANG( I, 2) 0.000000 0.000000
BIANLIANG( I, 3) 0.000000 0.000000
BIANLIANG( I, 4) 1.000000 0.000000
BIANLIANG( I, 5) 0.000000 0.000000
BIANLIANG( I, 6) 0.000000 0.000000
BIANLIANG( I, 7) 0.000000 0.000000
BIANLIANG( I, 8) 0.000000 0.000000
BIANLIANG( I, 9) 0.000000 0.000000
BIANLIANG( I, 10) 0.000000 0.000000
BIANLIANG( T, 1) 0.000000 0.000000
BIANLIANG( T, 2) 0.000000 0.000000
BIANLIANG( T, 3) 1.000000 0.000000
BIANLIANG( T, 4) 0.000000 0.000000
BIANLIANG( T, 5) 0.000000 0.000000
BIANLIANG( T, 6) 0.000000 0.000000
BIANLIANG( T, 7) 0.000000 0.000000
BIANLIANG( T, 8) 0.000000 0.000000
BIANLIANG( T, 9) 0.000000 0.000000
BIANLIANG( T, 10) 0.000000 0.000000
Row Slack or Surplus Dual Price
1 0.000000 0.000000
2 0.000000 0.000000
3 0.000000 0.000000
4 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 0.000000
7 0.000000 0.000000
8 0.000000 0.000000
9 0.000000 0.000000
10 0.000000 0.000000
11 0.000000 0.000000
12 0.000000 0.000000
13 0.000000 0.000000
14 0.000000 0.000000
15 0.000000 0.000000
16 0.000000 0.000000
17 0.000000 0.000000
18 0.000000 0.000000
19 0.000000 0.000000
20 0.000000 0.000000
21 0.000000 100000.0
22 0.000000 10000.00
23 0.000000 1000.000
24 0.000000 100.0000
25 0.000000 10.00000
26 0.000000 1.000000
27 0.000000 0.000000
28 0.000000 0.000000
29 0.000000 0.000000
30 0.000000 0.000000
31 0.000000 -1.000000
32 0.000000 0.000000
33 0.000000 0.000000
34 0.000000 0.000000
35 280516.0 -1.000000