主题:sos!!!!!!
田元景good
[专家分:0] 发布于 2008-06-20 21:19:00
液晶屏显示的十个阿拉伯数字(7笔划),这里把横和竖的一个短划都称为一笔,如7有3笔,8有7笔。编一个程序,重新排列10个数,使其相邻数字都可以由另一个数字加上几笔或减去几笔组成(如:4107395682),但不能又加又减。打印出所有可能的排列方法。
输出格式:
一行一个排列,要求按照字符串从小到大的顺序输出,格式如下:
0731495682
2807314956
2837014956
……
顺便求救几道难题,在上传里。
回复列表 (共5个回复)
沙发
angwuy [专家分:2280] 发布于 2008-06-21 09:03:00
把可以转换之间的两个数的信息进行打表,然后搜索
板凳
田元景good [专家分:0] 发布于 2008-06-21 10:50:00
要程序
3 楼
Mato完整版 [专家分:1270] 发布于 2008-06-21 22:04:00
好不容易做出来了,
这道对1楼很简单的题对我还是很难的!
{$N+}
TYPE
{Integer type declare}
I_ = INTEGER;
SI_ = SHORTINT;
LI_ = LONGINT;
BI_ = BYTE;
WI_ = WORD;
{Real type declare}
R_ = REAL;
SR_ = SINGLE;
DR_ = DOUBLE;
ER_ = EXTENDED;
CR_ = COMP;
{Other type declare}
C_ = CHAR;
B_ = BOOLEAN;
S_ = STRING;
a1_ = 0..9;
CONST
nbin: ARRAY[a1_] OF STRING[7] =
('1110111',
'0010010',
'1011101',
'1011011',
'0111010',
'1101011',
'1101111',
'1010010',
'1111111',
'1111011');
VAR
cz: ARRAY[a1_] OF STRING[9];
cznum: ARRAY[a1_] OF a1_;
sss1: ARRAY[a1_] OF a1_;
sss2: ARRAY[a1_] OF a1_;
PROCEDURE print;
VAR
i: a1_;
BEGIN
FOR i:=0 TO 9 DO WRITE(sss1[i]);
WRITELN;
END;
FUNCTION kc(ss1, ss2: S_): B_;
VAR
i: 1..7;
BEGIN
FOR i:=1 TO 7 DO
IF ss1[i] = '1' THEN
IF ss2[i] <> '1' THEN BEGIN kc := FALSE; EXIT; END;
kc := TRUE;
END;
VAR
i, j, kk, p, nm, v: a1_;
ss0: S_;
fl: B_;
BEGIN
FOR i:=0 TO 9 DO
FOR j:=0 TO 9 DO
IF i <> j THEN
IF (kc(nbin[i], nbin[j])) OR (kc(nbin[j], nbin[i])) THEN BEGIN
INC(cznum[i]);
cz[i] := cz[i] + CHR(48 + j);
END;
WRITELN('0731495682');
FOR i:=0 TO 9 DO BEGIN
FILLCHAR(sss1, SIZEOF(sss1), 0);
j := 0;
p := 0; sss1[0] := i; ss0 := cz[i]; nm := cznum[i];
REPEAT
INC(j);
IF j <= nm THEN BEGIN
v := ORD(ss0[j]) - 48; fl := TRUE;
FOR kk:=0 TO p DO IF sss1[kk] = v THEN BEGIN
fl := FALSE; BREAK;
END;
IF fl THEN BEGIN
INC(p); sss1[p] := v; sss2[p] := j; j := 0;
ss0 := cz[v]; nm := cznum[v];
IF p = 9 THEN print;
END;
END ELSE BEGIN
j := sss2[p]; DEC(p);
ss0 := cz[sss1[p]];
nm := cznum[sss1[p]];
END;
UNTIL p = 0;
END;
END.
4 楼
游侠UFO [专家分:1200] 发布于 2008-06-22 01:37:00
哈哈..如果每行代码两元那不赚翻了
5 楼
Mato完整版 [专家分:1270] 发布于 2008-06-27 18:52:00
嫌我的代码长是不是?
你就直接把所有的答案打印下来就行了,这样就短了。
不过LZ不会照顾你的。
告诉LS:来这个论坛是赚分的,不是缩减代码的!!!!!
我来回复