主题:[讨论]简单数组排序问题,分!
编程小菜菜
[专家分:90] 发布于 2007-07-30 22:02:00
给一个N(N<10)位的正整数,求由这个数的各位责成的位数相同的数,其值为最大和最小.
如N=62334,则最大为64332,最小为23346.
注意:数的首位不能为0![em18]
回复列表 (共4个回复)
沙发
Matodied [专家分:7560] 发布于 2007-07-30 22:06:00
算法:
只要把这个数的各位先从小到大排序,然后取任意一个最小的非0数字作为首位,接着写上所有的0,再把剩下的数字直接写上即可。
至于从大到小排序直接写了。
板凳
Matodied [专家分:7560] 发布于 2007-07-30 22:22:00
程序:
TYPE arr = ARRAY[1..10] OF INTEGER;
VAR
a: arr;
n: STRING; i, j, k, p, t, v: INTEGER;
s, s1, s2: STRING;
BEGIN
READLN(n); v := LENGTH(n); WRITELN;
FOR i:=1 TO v DO VAL(COPY(n, i, 1), a[i], k);
FOR i:=1 TO v - 1 DO BEGIN
FOR j:=i + 1 TO v DO BEGIN
IF a[i] > a[j] THEN BEGIN t := a[i]; a[i] := a[j]; a[j] := t; END;
END;
END;
p := 0;
REPEAT
p := p + 1;
UNTIL a[p] > 0;
STR(a[p], s1);
FOR i:=1 TO v DO BEGIN
IF i <> p THEN BEGIN
STR(a[i], s);
s1 := s1 + s;
END;
END;
WRITELN(s1);
FOR i:=1 TO v - 1 DO BEGIN
FOR j:=i + 1 TO v DO BEGIN
IF a[i] < a[j] THEN BEGIN t := a[i]; a[i] := a[j]; a[j] := t; END;
END;
END;
s2 := '';
FOR i:=1 TO v DO BEGIN
STR(a[i], s);
s2 := s2 + s;
END;
WRITELN(s2);
END.
3 楼
abcwuhang [专家分:1840] 发布于 2007-07-31 13:14:00
同上
4 楼
编程小菜菜 [专家分:90] 发布于 2007-07-31 17:45:00
谢了!不过数组应该是9个吧?N<10.
我来回复