You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用于教学的C#暴力破解算法仅输出0,求助故障排查

解决C#时钟式暴力破解算法只输出0的问题

嘿,我完全懂你遇到的困扰——这种模拟时钟进位的逻辑看着简单,但很容易在进位处理或者循环逻辑上栽跟头。你说代码只输出0,大概率是进位逻辑没正确触发,或者根本没写循环来生成后续的组合,只停在了初始状态。

先给你理清楚核心逻辑的正确打开方式,再给你一个可运行的示例代码:

核心思路回顾

我们要实现的是类似时钟“秒-分-时”的进位机制:

  • 从字符串的最后一位开始,逐个字符递增到字符数组的末尾
  • 当某一位到达末尾时,重置为第一个字符,同时向前一位“进位”(即前一位递增)
  • 重复这个过程,直到最高位也完成进位(比如从000到ZZZ的所有组合都生成完毕)

修正后的完整代码

using System;

class BruteForceCracker
{
    static void Main()
    {
        // 自定义你的字符集,可以添加小写字母、符号等
        char[] charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
        // 设置要生成的密码长度,比如3位
        int targetLength = 3;

        // 用索引数组记录每个位置当前使用的字符在charSet中的下标,初始全0(对应第一个组合"000")
        int[] currentIndices = new int[targetLength];

        do
        {
            // 把索引数组转换成对应的字符串输出
            string currentAttempt = new string(Array.ConvertAll(currentIndices, idx => charSet[idx]));
            Console.WriteLine(currentAttempt);

            // 执行进位逻辑:从最后一位开始处理
            int currentPos = targetLength - 1;
            bool needCarry = true;

            while (needCarry && currentPos >= 0)
            {
                currentIndices[currentPos]++;
                if (currentIndices[currentPos] == charSet.Length)
                {
                    // 当前位已经到字符集末尾,重置为0,继续向前进位
                    currentIndices[currentPos] = 0;
                    currentPos--;
                }
                else
                {
                    // 当前位不需要进位,停止进位流程
                    needCarry = false;
                }
            }

            // 当currentPos < 0时,说明最高位也完成了进位,所有组合生成完毕,退出循环
        } while (currentIndices[0] < charSet.Length);
    }
}

关键问题排查(针对你只输出0的情况)

你可以对照自己的代码检查这几点:

  1. 有没有循环生成组合?
    如果只执行了一次输出,那自然只会打印初始的0(或者000)。上面的代码用do-while循环来持续生成下一个组合,直到所有可能性都遍历完。
  2. 进位逻辑是否正确?
    很多人会忘记处理“连续进位”的情况(比如999要变成AAA),或者只处理了最后一位,没向前遍历进位。上面的while循环专门处理这种连锁进位。
  3. 是否正确将索引转为字符?
    如果直接输出了currentIndices里的数值0,而不是对应charSet[0]的字符,那也会只看到0。要确保用索引去字符数组里取对应的字符再输出。

调试小技巧

可以在进位逻辑里加一行打印,看看索引数组的变化:

Console.WriteLine($"当前索引数组: {string.Join(",", currentIndices)}");

这样就能清楚看到每一步的进位是否正确触发,方便定位问题。

内容的提问来源于stack exchange,提问作者Eldar B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:48:42