-1

整数引数より大きい最初の完全平方を返す関数を作成する必要があります。完全平方は、ある整数の 2 乗に等しい整数です。たとえば、16 = 4 * 4 であるため、16 は完全平方です。ただし、15 = n*n となる整数 n がないため、15 は完全平方ではありません。

public static int NextPerfectSquare(int inputNumber)
{
    if (inputNumber < 0) return 0;
    inputNumber++;
    var result = Math.Sqrt(inputNumber);
    var resultnumber = (int) result;
    if (resultnumber == result) return inputNumber;
    resultnumber++;
    return resultnumber * resultnumber;

}

これは正しいですか?

4

5 に答える 5

3

基本的なソリューションは良さそうです。次のことを検討してください。

  • この関数にコメントを追加する必要がありますか? 試験用ではないかもしれませんが、検討する価値はあります。
  • パラメータ/ローカル変数には一貫した大文字と小文字を使用してください。もっと明確に名前を付けることができるかどうかを検討してください。
  • 境界条件はどうですか?負のケースをカバーしましたが、inputNumber が int.MaxValue に近く、次の完全平方が > MaxValue になる場合はどうでしょうか?
于 2011-05-14T17:21:25.930 に答える
1

正しく動作しているようです。

私は個人的に次のようなものに行きます:

public static int Next(int inputNumber)
{
    if (inputNumber < 0) return 0;

    int perfectWidth = (int)Math.Floor(Math.Sqrt(inputNumber));
    return (int)Math.Pow(perfectWidth + 1, 2);
}

ロジックが少し明確になっていると思います。しかし、それはもちろん私の個人的な好みかもしれません;)

于 2011-05-14T17:50:09.837 に答える
1

私には正しいように見えます。負の数を処理し、完全平方ではない任意の値を適切に処理し、完全平方を適切に処理するので、yes を使用します。

于 2011-05-14T17:20:47.860 に答える
1

すこし。

しかし、いくつかのテストを実行することで、これを自分で非常に簡単に確認できたので、そのままにしておくのは嫌です。

System.Console.WriteLine("-10 => {0}", NextPerfectSquare(-10));
System.Console.WriteLine("0 => {0}", NextPerfectSquare(0));
System.Console.WriteLine("1 => {0}", NextPerfectSquare(1));
System.Console.WriteLine("15 => {0}", NextPerfectSquare(15));
System.Console.WriteLine("21 => {0}", NextPerfectSquare(21));
System.Console.WriteLine("24 => {0}", NextPerfectSquare(24));
System.Console.WriteLine("36 => {0}", NextPerfectSquare(36));
System.Console.WriteLine("Max => {0}", NextPerfectSquare(int.MaxValue));
System.Console.WriteLine("Min => {0}", NextPerfectSquare(int.MinValue));

-10 => 0
0 => 1
1 => 4
15 => 16
21 => 25
24 => 25
36 => 49
Max => 1
Min => 0

ボーナスポイントのために少し最適化できますか?

多数の場合でも安全にします。つまり long/Int64

最大値のオーバーフローから安全にします。(入力として int.MaxValue を入力してみてください)

于 2011-05-14T17:22:40.883 に答える
0

コードを次のように減らすことができます

public static int NextPerfectSquare(int inputNumber)
{
    if (inputNumber < 0) return 0;
    var result = Math.Sqrt(inputNumber);
    var resultnumber = (int) result;
    resultnumber++;
    return resultnumber * resultnumber;

}
于 2015-08-01T14:55:32.930 に答える