Lord_l&D 2022-06-21 13:30 采纳率: 100%
浏览 347
已结题

如何用java猜四位数密码?

猜密码:
3 6 2 8 其中一个数字正确且位置正确
7 0 1 9 其中两个数字正确,一个位置正确,一个位置不对
1 4 2 9 一个数字正确,位置不对
4 5 7 6 一个数字正确且位置正确
以上条件成立,且四位密码数字不重复,实用java程序实现。
有点类似力扣里的猜数字问题,这个问题仅用java基础进行编写(数组或者字符串,哈希和list不能用),大概都是暴力穷举,希望网友们多多参与讨论。

  • 写回答

9条回答 默认 最新

  • zlebhs 2022-06-21 14:04
    关注

    只用了些基础的方式,算法很简单,只要计算一下位置正确且数字正确的个数和数字正确的个数,然后和你给的条件暴力枚举即可

        public static void main(String[] args) {
            // 枚举法 out: 0518 3510
            String str1 = "3628";
            String str2 = "7019";
            String str3 = "1429";
            String str4 = "4576";
    
            for (int i = 0; i <= 9999; i++) {
                // 补0
                String cur = String.format("%04d", i);
                if (!check(cur, str1, 1, 1)) continue;
                if (!check(cur, str2, 1, 2)) continue;
                if (!check(cur, str3, 0, 1)) continue;
                if (!check(cur, str4, 1, 1)) continue;
                System.out.println("密码:" + cur);
            }
        }
    
        public static boolean check(String target, String condition, int targetPos, int targetSame) {
            int[] cnt1 = new int[10];
            int[] cnt2 = new int[10];
            // 位置正确且数字正确个数
            int posCnt = 0;
            for (int i = 0; i < 4; i++) {
                char c1 = target.charAt(i);
                char c2 = condition.charAt(i);
                cnt1[c1 - '0']++;
                cnt2[c2 - '0']++;
                // 重复数字直接返回false
                if (cnt1[c1 - '0'] > 1) return false;
                if (c1 == c2) posCnt ++;
            }
            // 数字正确个数
            int sameCnt = 0;
            for (int i = 0; i < 10; i++) {
                sameCnt += Math.min(cnt1[i], cnt2[i]);
            }
            return posCnt == targetPos && sameCnt == targetSame;
        }
    

    输出

    密码:0518
    密码:3510
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(8条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月21日
  • 已采纳回答 6月21日
  • 创建了问题 6月21日

悬赏问题

  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启