一道Google面试题用Lingo解
本帖最后由 wujianjack2 于 2013-8-21 22:05 编辑原题是这样的:
请根据以下信息推算出这些兄弟姐妹的排行与各自性别:
1.A有3个妹妹;
2.B有一个哥哥;
3.C是女的,她有两个妹妹;
4.D有2个弟弟;
5.E有两个姐姐;
6.F也是女的,但她和G没有妹妹。
然后我用Lingo编了如下程序:
model:
sets:
mem/A..G/:gd,eld; !gd表示性别(1为男,0为女);eld表示在家中的排行,值越大排行越高;
endsets
@for(mem:@bin(gd)); @for(mem:@gin(eld));
@sum(mem(i)|eld(i)#lt#eld(1):1-gd(i))=3; !A有3个妹妹;
@sum(mem(i)|eld(i)#gt#eld(2):gd(i))=1; !B有1个哥哥;
@sum(mem(i)|eld(i)#lt#eld(3):1-gd(i))=2; !C有2个妹妹;
gd(3)=0; !C是女的;
@sum(mem(i)|eld(i)#lt#eld(4):gd(i))=2; !D有两个弟弟;
@sum(mem(i)|eld(i)#gt#eld(5):1-gd(i))=2; !E有两个姐姐;
@sum(mem(i)|eld(i)#lt#eld(6):1-gd(i))=0; !F没有妹妹;
gd(6)=0; !F是女的;
@sum(mem(i)|eld(i)#lt#eld(7):1-gd(i))=0; !G没有妹妹;
min=@sum(mem:eld);
end
结果说我的程序是 ill defined的。。。
希望各位大侠看看这个程序错在什么地方??
真是太使用了! {:3_61:}{:3_61:}{:3_61:}{:3_61:}{:3_61:} 有谁知道错在哪里了吗,同求啊 本帖最后由 wujianjack2 于 2013-8-21 22:06 编辑
!请根据以下信息推算出这些兄弟姐妹的排行与各自性别:
1.A有3个妹妹;2.B有一个哥哥;3.C是女的,她有两个妹妹;4.D有2个弟弟;5.E有两个姐姐;6.F也是女的,但她和G没有妹妹。;
MODEL:
SETS:
PEOPLE/1..7/:XB,AGE; !XB:表示性别,1为男,0为女。AGE:表示年龄;
ENDSETS
@FOR(PEOPLE:@BIN(XB));
@FOR(PEOPLE:@GIN(AGE));
@FOR(PEOPLE:@BND(1,AGE,7));
@FOR(PEOPLE(I):@FOR(PEOPLE(J)|I#NE#J:@ABS(AGE(I)-AGE(J))>=1));!每个人的排行不一样;
@SUM(PEOPLE(I)|I#NE#1:@IF(AGE(I)#LT#AGE(1),1-XB(I),0))=3;
@SUM(PEOPLE(I)|I#NE#2:@IF(AGE(I)#GT#AGE(2),XB(I),0))=1;
@SUM(PEOPLE(I)|I#NE#3:@IF(AGE(I)#LT#AGE(3),1-XB(I),0))=2;
@SUM(PEOPLE(I)|I#NE#4:@IF(AGE(I)#LT#AGE(4),XB(I),0))=2;
@SUM(PEOPLE(I)|I#NE#5:@IF(AGE(I)#GT#AGE(5),1-XB(I),0))=2;
@SUM(PEOPLE(I)|I#NE#6:@IF(AGE(I)#LT#AGE(6),1-XB(I),0))=0;
@SUM(PEOPLE(I)|I#NE#7:@IF(AGE(I)#LT#AGE(7),1-XB(I),0))=0;
XB(3)=0;
XB(6)=0;
max=@sum(PEOPLE:AGE);
END
Variable Value Reduced Cost
XB( 1) 0.000000 0.000000
XB( 2) 1.000000 0.000000
XB( 3) 0.000000 0.000000
XB( 4) 1.000000 0.000000
XB( 5) 0.000000 0.000000
XB( 6) 0.000000 0.000000
XB( 7) 1.000000 0.000000
AGE( 1) 7.000000 -1.000000
AGE( 2) 4.000000 -1.000000
AGE( 3) 6.000000 -1.000000
AGE( 4) 5.000000 -1.000000
AGE( 5) 3.000000 -1.000000
AGE( 6) 2.000000 -1.000000
AGE( 7) 1.000000 -1.000000
结果 面试题。和面试官说:“你好,让我用Lingo解一下。。。”
开个玩笑~~
页:
[1]