给定数据求最大数问题

来源:互联网 发布:网络英语教学 编辑:程序博客网 时间:2024/05/29 16:17

给定任意一个正整数,从1到9中选取任意数字相加的和为给定的整数,且由这些数字组成一个最大数,且相邻两数不能重复,如3的组合为21,4的组合为121。

由于相邻两数不能重复,而且组合出来的数字需要尽可能大,则第一原则是保证足够多的位数,在位数相同的情况下保证高位的数比低位的数大,由此可得出2和1来进行组合。

(1)假设最高为为1,则从给定的数值减去1。

(2)在(1)中减去1后的值中减去1或者2,由于(1)中减去1则只能减去2。

(3)重复(1)和(2)中的步骤,当给定的数值只剩 1 或者 2 时,1不做操作,如果为2则将组合的 1 和 2 的位置对调。

下面为Java代码实现

public static String max(int in) {    if (in < 3) {        return in+"";    }    int flag = 1;    boolean re;    StringBuilder sb = new StringBuilder();     re = doSomething(flag, in, sb, 1);    if (re) {        flag=2;        sb = new StringBuilder();        doSomething(flag, in, sb, 2);    }    return sb.toString();}private static boolean  doSomething(int flag, int in, StringBuilder sb, int f) {    boolean re = false;    int c = in;    while (c > 0) {        sb.append(flag);        c = c - flag;        if (flag == 1) {            flag = 2;        } else {            flag = 1;        }        if (f == 1 && (c < flag || c == 2)) {            re = true;            return re;        } else if ( f == 1 && c == flag) {            re = false;            sb.append(c);            return re;        }    }    return re;}

原创粉丝点击