C# 为什么我的代码生成的解决方案与官方解决方案不同?

C# 为什么我的代码生成的解决方案与官方解决方案不同?,c#,C#,我试图解决一个“代码的出现”的难题,这需要找出密码列表中有多少密码是有效的,以及它们的策略 但是我的代码总是返回627,而不是474,这是我的拼图输入的官方解决方案 有人能解释一下可能出了什么问题吗 谜题: 我的拼图输入: publicstaticvoidday2() { int i=0; int结果=0; string[]text=ReadAllLines(@“C:\Users\Kcir\Documents\Programming\myapp\day2.txt”); 字符串[]策略=新字符

我试图解决一个“代码的出现”的难题,这需要找出密码列表中有多少密码是有效的,以及它们的策略

但是我的代码总是返回627,而不是474,这是我的拼图输入的官方解决方案

有人能解释一下可能出了什么问题吗

谜题:

我的拼图输入:

publicstaticvoidday2()
{
int i=0;
int结果=0;
string[]text=ReadAllLines(@“C:\Users\Kcir\Documents\Programming\myapp\day2.txt”);
字符串[]策略=新字符串[text.Length];
字符串[]已损坏=新字符串[text.Length];
int[]min=新int[text.Length];
int[]max=新的int[text.Length];
foreach(文本中的字符串x)
{
policy[i]=x.Substring(x.IndexOf(“:”)-1,1);
min[i]=Int32.Parse(x.Substring(0,x.IndexOf(“-”));
max[i]=Int32.Parse(x.Substring(x.IndexOf(“-”)+1,2));
损坏的[i]=x.Substring(x.IndexOf(“:”)+2);
i++;
}
对于(i=0;i如果(计数>=min[i]&&count您的嵌套循环条件不好-您的算法的计数永远不会超过策略的最大值

您的代码没有检查损坏数组中的所有字母。第一次出现错误计数是第6种情况,即
5-14 t:ttttttttttttttttttttt
。需要检查17个字母,但您只检查前14个。我建议你学习如何调试。看我的屏幕截图,损坏的[I]仍有3个字母,但你的代码退出循环

我简化了您的代码(不需要很多数组)并修复了错误(检查所有字母):

void Main()
{
var valid=0;
var data=File.ReadAllLines(@“D:\day2.txt”);
foreach(数据中的var行)
{
var letter=line[line.IndexOf(“:”)-1];//策略中的字母
var min=Int32.Parse(line.Substring(0,line.IndexOf(“-”));//策略中的最小计数
var max=Int32.Parse(line.Substring(line.IndexOf(“-”)+1,2));//策略中的最大计数
var password=line.Substring(line.IndexOf(“:”)+2);//需要验证密码
var count=0;//密码中字母的计数
foreach(密码中的var l)//循环密码中的所有字母
{
if(l==字母)count++;//递增密码中找到的字母数
}

如果(count>=min&&count问题需要在这里独立。您需要在问题本身(而不是链接)中添加足够的描述、输入和输出。请阅读!我将行更改为
j
    public static void Day2()
    {
        int i = 0;
        int result = 0;
        string[] text = ReadAllLines(@"C:\Users\Kcir\Documents\Programming\myapp\day2.txt");
        string[] policy = new string[text.Length];
        string[] corrupted = new string[text.Length];
        int[] min = new int[text.Length];
        int[] max = new int[text.Length];

        foreach (string x in text)
        {

            policy[i] = x.Substring(x.IndexOf(":") - 1, 1);
            min[i] = Int32.Parse(x.Substring(0, x.IndexOf("-")));
            max[i] = Int32.Parse(x.Substring(x.IndexOf("-") + 1, 2));
            corrupted[i] = x.Substring(x.IndexOf(":") + 2);
            i++;
        }

        for (i = 0; i < corrupted.Length; i++)
        {
            int count = 0;
            for (int j = 0; j < max[i]; j++)
            {
                if (corrupted[i].Contains(policy[i]))
                {
                    corrupted[i] = corrupted[i].Substring(corrupted[i].IndexOf(policy[i]) + 1);
                    count++;
                }
            }

            if (count >= min[i] && count <= max[i])
            {
                result++;
            }
        }
        WriteLine("Number of valid passwords: " + result);
    }
void Main()
{
    var valid = 0;
    var data = File.ReadAllLines(@"D:\day2.txt");
    foreach (var line in data)
    {
        var letter = line[line.IndexOf(":") - 1];                           // letter in policy
        var min =  Int32.Parse(line.Substring(0, line.IndexOf("-")));       // minimum count in policy
        var max = Int32.Parse(line.Substring(line.IndexOf("-") + 1, 2));    // maximum count in policy
        var password = line.Substring(line.IndexOf(":") + 2);               // password need to be verified
        var count = 0;                                                      // count of letter in password
        foreach (var l in password)                                         // loop all letters in password
        {
            if (l == letter) count++;                                       // increment number of letters found in password
        }
        if (count >= min && count <= max) valid++;                          // increment number of valid passwords
    }
    Console.WriteLine(valid);
}