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