1

私はかなり長い間この問題に悩まされてきました。コンソールに入力を入力すると問題なく動作するように見えますが、送信すると、ソリューションは常にテスト #3 に失敗します (入力または出力が何であるかを確認できません)。問題はここティムスです。問題は次のとおりです。

この問題はとても簡単なので、著者は説明を書くのが面倒でした!

入力

入力ストリームには、一連の整数 Ai (0 ≤ Ai ≤ 1018) が含まれます。数字は、任意の数のスペースと改行で区切られます。入力ストリームのサイズは 256 KB を超えません。

出力

最後の数値から最初の数値までの各数値 Ai について、その平方根を出力する必要があります。各平方根は、小数点以下 4 桁以上で別の行に出力する必要があります。

入力:

1427  0   

     876652098643267843 

5276538

出力:

2297.0716

936297014.1164

0.0000

37.7757

これは私のコードです:

using System;
using System.Collections.Generic;
using System.IO;

namespace ReverseRoot
{
class Program
{
    static void Main(string[] args)
    {
        List<ulong> longs = new List<ulong>();

        string current = "";
        bool inNumber = false;

        string input = Console.In.ReadToEnd();
        for (int i = 0; i < input.Length; ++i)
        {
            char c = input[i];
            if (inNumber && !char.IsDigit(c))
            {
                longs.Add(ulong.Parse(current));
                inNumber = false;
                current = "";
            }
            if (char.IsDigit(c))
            {
                inNumber = true;
                current += c;
            }
        }

        longs.Reverse(0, longs.Count);

        foreach (ulong n in longs)
        {
            double p = (Math.Truncate(Math.Sqrt(n) * 10000.0)) / 10000.0;
            Console.WriteLine("{0:F4}", p);
        }
        Console.ReadLine();
    }
}
}

問題の文言が完全に明確ではないため、小数点以下 4 桁に丸めることも試みました。

        foreach (ulong n in longs)
        {
            Console.WriteLine("{0:F4}", Math.Sqrt(n));
        }

コンソールの値の範囲で数値を試しましたが、それが何であるかわかりません。

4

1 に答える 1

8

これにより、サイト上の出力が得られます....(切り捨てられたものはそうではないため、丸めが必要です)

private static void Main(string[] args)
{            
   Console.In.ReadToEnd().Split(new[] { ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
        .Select(ulong.Parse)
        .Reverse()
        .Select(n => Math.Sqrt(n).ToString("F4"))
        .ToList()
        .ForEach(Console.WriteLine);
}
于 2013-06-11T23:55:20.957 に答える