gpt4 book ai didi

C# 在 HackerEarth 上获取 NZEC 错误解析输入

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:14 24 4
gpt4 key购买 nike

我想学习 C#,所以我开始使用 hackerearth 并从他们的网站上解决问题,但我遇到了某种问题。所以我有以下代码

using System;

namespace ConsoleApp6
{
class Program
{
static void Main(string[] args)
{
long N, i, answer = 1;
do
{
N = Convert.ToInt32(Console.ReadLine());

} while (N < 1 && N > 1000);

long[] A = new long[N];

for (i = 0; i < N; i++)
{
do
{
A[i] = Convert.ToInt32(Console.ReadLine());
} while (A[i] < 1 && A[i] > 1000);
}

for(i = 0; i < N; i++)
{
answer = (answer * A[i]) % (1000000007);
}

Console.WriteLine(answer);
}
}
}

当我编译它时,我得到了正确的答案,一切都很好,但是当我将它提交给 hackerearth 编译器时,它给了我 NZEC 错误。自从我几天前刚开始使用 C# 以来,我认为我遗漏了一些东西,所以我又写了一次,但是是用 C++ 写的,它给了我网站上的最高分。我知道我的变量声明中可能存在一些问题,因为我不完全理解如何读取数字,我希望你能帮助我解决这个问题。谢谢!

最佳答案

假设您卡在 Find Product problem 上,正如您所怀疑的那样,数据的输入是一行 N,然后一行是您需要相乘的所有 N 个数字,以空格分隔。您可以使用 LINQ 快速解析数字行(我建议您尽快进入 LINQ - 这将使您远离 C++ 命令式思维)。

怎么样:

using System;
using System.Linq;
using System.Collections.Generic;
using System.Diagnostics;

namespace ConsoleApp6
{
class Program
{
static void Main(string[] args)
{
var N = Convert.ToInt32(Console.ReadLine()); // Less than 2^31 integers to be read
var A = Console.ReadLine() // Read the line of space delimited numbers
.Split(' ') // Split out by the separator
.Select(n => Convert.ToInt64(n)) // Parse each number to long
.ToArray(); // Convert to a materialized array

Debug.Assert(A.Length == N, "Site lied to us about N numbers");

long answer = 1; // or var answer = 1L;
for(var i = 0; i < N; i++)
{
answer = (answer * A[i]) % (1000000007);
}

Console.WriteLine(answer);
}
}
}

一些注意事项:

  • do..while 没有效果 - 它们总是会在一次通过后退出 - 这是因为一个值不能同时为 < 1 和 > 1000
  • 请注意,Convert.ToInt32 解析 32 位 int。您已经定义了一个 long(与 C++ 不同,在 C# 中始终是 64 位),所以这应该是 Convert.ToInt64
  • 然而,问题确实将 A[i] 限制在 10 ^ 3 以下,因此 A[] 可以是 int[],尽管乘积可能更大,所以 long 甚至 System.Numerics.BigInteger 都可以用于产品。
  • NZEC 是站点特定错误 - 这意味着应用程序因非零进程 ecit 代码而崩溃。该站点还会在页面下方打印实际错误和堆栈跟踪。

既然你说你想学习 C#(而不仅仅是将 C 代码转换为 C#),你还可以 LINQify 最终的 for 循环,它使用 .Aggregate 从数组中计算答案。 .聚合支持种子重载(即 left fold,因为它允许返回类型不同)和非种子重载(即 reduce,其中返回类型必须是与输入可枚举相同)。在你的情况下,你实际上不需要用 1L 播种答案,因为它可以用 A[0] 播种,下一个乘法将用 A[1] 因为任何数字乘以 1 都将是数字。

var answer = A.Aggregate((subtotal, next) => (subtotal * next) % (1000000007));

关于C# 在 HackerEarth 上获取 NZEC 错误解析输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48773845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com