用 1、2、2、3、4、5 这 6 个数字,用 Java 写一个 main 函数,打印出所有不同的排列,如:512234,412345 等,要求:“4“ 不能在第三位,“3“ 和“5“ 不能相连

public class NumberRandom {
    String[] stra = {"1", "2", "2", "3", "4", "5"};
    int n = stra.length;
    boolean[] visited = new boolean[n];
    String result = "";
    TreeSet<String> ts = new TreeSet<>();
    int[][] a = new int[n][n];

    private void searchMap() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j) {
                    a[i][j] = 0;
                } else {
                    a[i][j] = 1;
                }
            }
        }

        // 3 和 5 不能相连
        a[3][5] = 0;
        a[5][3] = 0;

        // 开始遍历
        for (int i = 0; i < n; i++) {
            search(i);
        }

        Iterator<String> it = ts.iterator();
        while (it.hasNext()) {
            String str = it.next();
            // 4 不能在第三位
            if (str.indexOf("4") != 2) {
                System.out.println(str);
            }
        }

    }

    private void search(int startIndex) {
        visited[startIndex] = true;
        result = result + stra[startIndex];
        if (result.length() == n) {
            ts.add(result);
        }
        for (int j = 0; j < n; j++) {
            if (a[startIndex][j] == 1 && visited[j] == false) {
                search(j);
            } else {
                continue;
            }
        }

        // 一个 result 结束后踢掉最后一个,寻找别的可能性,若没有的话,则继续向前踢掉一个
        result = result.substring(0, result.length() - 1);
        visited[startIndex] = false;
    }


    public static void main(String[] args) {
        new NumberRandom().searchMap();
    }
}

打印结果如下:

122345
122543
123245
123254
123425
123452
125234
125243
125423
125432
132245
132254
132425
132452
132524
132542
142325
142523
143225
143252
145223
145232
152234
152243
152324
152342
152423
152432
212345
212543
213245
213254
213425
213452
215234
215243
215423
215432
221345
221543
223145
223154
223415
223451
225134
225143
225413
225431
231245
231254
231425
231452
231524
231542
232145
232154
232415
232451
232514
232541
241325
241523
242315
242513
243125
243152
243215
243251
245123
245132
245213
245231
251234
251243
251324
251342
251423
251432
252134
252143
252314
252341
252413
252431
312245
312254
312425
312452
312524
312542
315224
315242
315422
321245
321254
321425
321452
321524
321542
322145
322154
322415
322451
322514
322541
325124
325142
325214
325241
325412
325421
341225
341252
341522
342125
342152
342215
342251
342512
342521
345122
345212
345221
412325
412523
413225
413252
415223
415232
421325
421523
422315
422513
423125
423152
423215
423251
425123
425132
425213
425231
431225
431252
431522
432125
432152
432215
432251
432512
432521
451223
451232
451322
452123
452132
452213
452231
452312
452321
512234
512243
512324
512342
512423
512432
513224
513242
513422
521234
521243
521324
521342
521423
521432
522134
522143
522314
522341
522413
522431
523124
523142
523214
523241
523412
523421
541223
541232
541322
542123
542132
542213
542231
542312
542321
543122
543212
543221

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个使用Java的满足Luhn校验规则的卡号生成函数示例: ```java public class LuhnCardNumberGenerator { public static String generateCardNumber(int length) { StringBuilder cardNumber = new StringBuilder(); // 生成随机的前 n-1 位数字 for (int i = 0; i < length - 1; i++) { int digit = (int) (Math.random() * 10); cardNumber.append(digit); } // 计算校验位 int checksum = calculateChecksum(cardNumber.toString()); // 添加校验位到卡号末尾 cardNumber.append(checksum); return cardNumber.toString(); } private static int calculateChecksum(String cardNumber) { int sum = 0; boolean doubleDigit = false; // 从右往左遍历卡号 for (int i = cardNumber.length() - 1; i >= 0; i--) { int digit = Character.getNumericValue(cardNumber.charAt(i)); if (doubleDigit) { digit *= 2; if (digit > 9) { digit = digit % 10 + 1; } } sum += digit; doubleDigit = !doubleDigit; } return (sum * 9) % 10; } public static void main(String[] args) { int cardLength = 16; // 卡号长度(不包括校验位) String cardNumber = generateCardNumber(cardLength); System.out.println("生成的卡号:" + cardNumber); } } ``` 这个示例中,`generateCardNumber` 函数用于生成满足Luhn校验规则的卡号。它首先通过随机生成的数字生成卡号的前n-1位,然后使用 `calculateChecksum` 函数计算校验位,并将其添加到卡号末尾。`calculateChecksum` 函数从卡号的最右边开始,按照Luhn算法的规则计算校验位。 在 `main` 函数中,我们可以指定卡号的长度,并打印生成的卡号。 请注意,这只是一个简单的示例,用于演示如何生成满足Luhn校验规则的卡号。在实际应用中,可能需要考虑更复杂的逻辑,例如不同类型的卡号规则、校验位的位置等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qqfig

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值