C#数组长度更新

时间:2016-11-06 12:23:29

标签: c# arrays linq loops

我正在通过此链接解决问题: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#的新手。

2 个答案:

答案 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关键字。