回 帖 发 新 帖 刷新版面

主题:[讨论]简单数组排序问题,分!

给一个N(N<10)位的正整数,求由这个数的各位责成的位数相同的数,其值为最大和最小.
如N=62334,则最大为64332,最小为23346.
注意:数的首位不能为0![em18]

回复列表 (共4个回复)

沙发

算法:
只要把这个数的各位先从小到大排序,然后取任意一个最小的非0数字作为首位,接着写上所有的0,再把剩下的数字直接写上即可。

至于从大到小排序直接写了。

板凳

程序:
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 楼

同上

4 楼

谢了!不过数组应该是9个吧?N<10.

我来回复

您尚未登录,请登录后再回复。点此登录或注册