我正在通过此链接解决问题:https://www.hackerrank.com/challenges/cut-the-sticks(如果我的解释不够或不太清楚,我添加了链接以获取更多详细信息。)
这一点从我在第一次练习中给出一个(int)数量的棍棒,我将在操作中使用。第二行我输入了棍子的长度。因此,我必须找到最小的棒(k),然后从其余的棒中减去它,然后使程序打印出我已经切割的总棒数。因此,如果棒之前被切断或其原始值为0,我必须将其移除并且不计算它。然后这应该重复以重新定义k的值,因为min数组值将被更改,因为所有的棒被切割。
这是我使用的代码:
int n = Convert.ToInt32(Console.ReadLine());
string[] userinput = Console.ReadLine().Split(' ');
int[] arr = new int[n];
arr = Array.ConvertAll(userinput, Int32.Parse);
for (int i = 0; i < n - 1; i++)
{
arr = arr.Where(s => s != '0').ToArray();
int k = arr.Min();
arr[i] -= k;
Console.WriteLine(arr.Length);
}
Console.ReadKey();
问题是它继续打印n值,这是数组的原始大小,在删除0后它不会修改。那么如何修复它只是打印切割棒的数量以及何时全部棍子是0所以打破?
我很抱歉我的英语,如果我的解释有点困难,但我只是C#的新手。
答案 0 :(得分:1)
您的代码中存在明显错误。 char&#39; 0&#39;不是整数0. char和int之间的自动转换允许编译和运行此代码,但是您没有正确测试输入
例如
ORDER BY
永远不会打印&#34;是零&#34;,而
task_id
将打印&#34;是零&#34;因为char&#39; 0&#39;的整数值是48岁。
现在为了解决你的问题,我可以发布这段代码
int[] arr = new int[] {0,1,2,3,4};
if(arr[0] == '0')
Console.WriteLine("Is Zero");
但请仔细研究,否则我的解决方案对您未来的编程任务没有帮助
答案 1 :(得分:1)
这是您预期和测试的工作代码。
注意:我只是重用了所有可以进一步重构的变量名和命名约定。
class Program
{
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
string[] userinput = Console.ReadLine().Split(' ');
int[] arr = new int[n];
arr = Array.ConvertAll(userinput, Int32.Parse);
CutTheStick(arr);
Console.ReadKey();
}
private static void CutTheStick(int[] arr)
{
arr = arr.Where(s => s != 0).ToArray();
if (arr.Length > 0)
{
Console.WriteLine(arr.Length);
int k = arr.Min();
for (int i = 0; i < arr.Length; i++)
{
arr[i] -= k;
}
CutTheStick(arr);
}
}
}
如果你有基于web / winForm的应用程序,请相应地删除static
关键字。