VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
123
返回列表 发新帖
楼主: 张阿大

请各位高手帮忙写个算法!!

[复制链接]

1

主题

12

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
 楼主| 发表于 2020-6-20 17:00:01 | 显示全部楼层
好了,很好,谢谢你,同样感谢所有回答问题的朋友!!
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-6-20 21:30:01 | 显示全部楼层

import java.util.Scanner;

public class Test34 {
        public static void Cal(long max) {
                String str34[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                                "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M",
                                "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

                String result = "";
                String tmpStr = "";
                long tmpI;               
                int maxWS = 1;
                int tmpWS;
                tmpI = max;
                // 首先判断输入数字的34进制位数
                while (tmpI / 34 > 34) {
                        maxWS++;
                        tmpI = tmpI / 34;
                }
                // 输出递增
                for (int i = 0; i < max; i++) {
                        tmpI = i;
                        tmpWS = maxWS;
                        result = "";
                        while (tmpWS > 0) {
                                tmpStr = str34[(int) Math.floor(tmpI
                                                / Math.pow(34, (double) tmpWS))];
                                result = result + tmpStr;
                                if (tmpStr != "0") {
                                        tmpI = tmpI- (new Double(Math.floor(tmpI/ Math.pow(34, (double) tmpWS)))).longValue()                                                        * (new Double(Math.pow(34, (double) tmpWS))).longValue();
                                }
                                tmpWS--;
                        }
                        result = result + str34[(int) i % 34];
                        System.out.println(result);
                }

        }

        public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                while (true) {
                        long num = in.nextLong();
                        if (num == 0) {
                                System.exit(0);
                        }
                        Cal(num);
                }
        }
}

任意输入一个十进制数字,调用Cal()方法打印从1递增到该十进制数字的34进制数
回复

使用道具 举报

0

主题

9

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-6-21 09:30:01 | 显示全部楼层
public class TestSn {

    public static final char EXCEPT_CHAR_I = 'I';
    public static final char EXCEPT_CHAR_O = 'O';
    public static final char REVERT_CHAR = '[';

    public TestSn() {

    }

    public String getNextSn(String sn) {

        if (sn == null || sn.equals("")) {
            sn = "0000";
        }

        char[] snChars = sn.toCharArray();
        snChars[3] = (char)(snChars[3] + 1);
        for (int i = snChars.length - 1; i >= 0; i--) {
            if (snChars[i] == ':') {
                snChars[i] = 'A';
                break;
            }
            if (snChars[i] == EXCEPT_CHAR_I) {
                snChars[i] = 'J';
                break;
            }
            if (snChars[i] == EXCEPT_CHAR_O) {
                snChars[i] = 'P';
                break;
            }

            if (i == 0) {
                if (snChars[i] == REVERT_CHAR) {
                    return "0000";
                }
            }
            else {
                if (snChars[i] == REVERT_CHAR) {
                    snChars[i] = '0';
                    snChars[i - 1] = (char)(snChars[i - 1] + 1);
                }
            }
        }

        return new String(snChars);
    }

    public static void main(String[] args) {

        TestSn test = new TestSn();
        String sn = "0000";
        int times = 0;
        while (!sn.equals("ZZZZ")) {
            times++;
            sn = test.getNextSn(sn);
            System.out.println(times + ":" + sn);
        }
    }

}
回复

使用道具 举报

1

主题

12

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
 楼主| 发表于 2020-6-23 13:15:01 | 显示全部楼层
回复 cdl30000  ,你的输入 1157 ,1158 就会出现java.lang.ArrayIndexOutOfBoundsException: 34
        at com.omiss.gs.code.Test34.Cal(Test34.java:31)
        at com.omiss.gs.code.Test34.main(Test34.java:54)
Exception in thread "main"
回复

使用道具 举报

0

主题

9

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-7-3 19:30:01 | 显示全部楼层
优化一下:)
----------------------------

public class TestSn {

    public static final char FIRST_SECT_START = '0';
    public static final char FIRST_SECT_END = '9';
    public static final char SECOND_SECT_START = 'A';
    public static final char SECOND_SECT_END = 'Z';
    public static final char EXCEPT_CHAR_I = 'I';
    public static final char EXCEPT_CHAR_O = 'O';
    public static final String CYCLE_SN_FIRST = "0000";

    public TestSn() {

    }

    public String getNextSn(String sn) {

        if (sn == null || sn.equals("")) {
            sn = CYCLE_SN_FIRST;
        }

        char[] snChars = sn.toCharArray();
        snChars[3] = (char)(snChars[3] + 1);
        for (int i = snChars.length - 1; i >= 0; i--) {
            if (snChars[i] == FIRST_SECT_END + 1) {
                snChars[i] = SECOND_SECT_START;
                break;
            }
            if (snChars[i] == EXCEPT_CHAR_I) {
                snChars[i] = EXCEPT_CHAR_I + 1;
                break;
            }
            if (snChars[i] == EXCEPT_CHAR_O) {
                snChars[i] = EXCEPT_CHAR_O + 1;
                break;
            }

            if ((snChars[i] >= FIRST_SECT_START && snChars[i] <= FIRST_SECT_END)
                || (snChars[i] >= SECOND_SECT_START && snChars[i] <= SECOND_SECT_END)) {
                break;
            }

            if (i == 0) {
                if (snChars[i] == SECOND_SECT_END + 1) {
                    return CYCLE_SN_FIRST;
                }
            }
            else {
                if (snChars[i] == SECOND_SECT_END + 1) {
                    snChars[i] = FIRST_SECT_START;
                    snChars[i - 1] = (char)(snChars[i - 1] + 1);
                }
            }
        }

        return new String(snChars);
    }

    public static void main(String[] args) {

        TestSn test = new TestSn();
        String sn = "0000";
        int times = 0;
        while (!sn.equals("ZZZZ")) {
            times++;
            sn = test.getNextSn(sn);
            System.out.println(times + ":" + sn);
        }
    }
}
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-7-10 12:45:01 | 显示全部楼层
class Test
{

public static void main(String[] args)
{
String[] strAr= {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"};
String b = "";
int le = strAr.length;
int bLength = le*le*le*le;
System.out.println("Start" + le);
for (int a=0;a < bLength; a++ )
{
  System.out.println("this is over code :" strAr[(a%(le*le*le))/(le*le*le)]+ str[(a%(le*le))/(le*le)]+strAr[(a%le)/le]+ strAr[a%le];
}
}
}

没测试过 试一下吧
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-7-10 18:15:01 | 显示全部楼层
不好意思上面那个是错误的哈.
class Test
{

public static void main(String[] args)
{
String[] strAr= {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"};
String b = "";
int le = strAr.length;
int bLength = le*le*le*le;
System.out.println("Start" + le);
for (int a=0;a < le*le*le*le; a++ )
{
  System.out.println("this is over code :" + strAr[(a%(le*le*le*le))/(le*le*le)]+ strAr[(a%(le*le*le))/(le*le)]+strAr[(a%(le*le))/le]+ strAr[a%le]);
}
}
}
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-13 00:00:01 | 显示全部楼层
hehe呵呵高手啊!
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-14 19:15:01 | 显示全部楼层
问题解决了吗?我现在在网吧里,没办法看,昨天那个没测过,理解错了,呵呵!
回复

使用道具 举报

1

主题

12

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
 楼主| 发表于 2020-7-20 00:45:01 | 显示全部楼层
问题解决了,非常感谢关注!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表