2017-08-11 3 views
-4

私はコードを書いています。これは、sqrt全体を自然数にするPの最小値を教えてください。 問題は、P = Kの部分に到達するたびにループが停止し、同じ値であるということです。例えば :番号4のために、それは完璧に動作しますが、5のために、それは彼らが同じであると言うが、45の平方根は自然数C#で自然数を見つける

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication10 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int k, p = 0; 
      double final; 
      Console.WriteLine("Please enter the value of K "); 
      k = int.Parse(Console.ReadLine()); 
      final = System.Math.Sqrt(4 * k + System.Math.Pow(p, 2)); 
      while (final - (int)(final) != 0&&p!=k) 
      { 
       final = System.Math.Sqrt(4 * k + System.Math.Pow(p, 2)); 
       p++; 
      } 
      Console.WriteLine("k is {0}, and P is {1}", k, p); 
     } 
    } 
} 
+7

コードは、あなたが* *それはそれを行う作るまでは*やって*いると思い何を行うことはありません。 –

+3

コードがうまくいかない場合は.... – dcg

+0

もっとレイヤー8でエラーが発生します – Fabiano

答えて

0

はない注:これは、明示的に質問に記載されていないですが、私Kを自然数(負ではない!)とすると、解がより複雑になります。

下限はかなり簡単です:

は、問題の下限と上限を再検討でき、Q² == 4KしたがってP == 0

ようP == K-1K > 1 assumung、Q² == (K+1)² == 4K + (K-1)²によって与えられる上限K == 0およびK == 1のケースは些細なものであり、上限が下限に等しいため)。

これは、期待を見つけることを意味し、有効なPP == K前(またはK == 0の場合には、その後、P == 0)(最初の質問を見たとき、私にはその明らかではなかった)有効なものです。

質問に移動して、[0, K-1]の範囲のコードが見つからないのはなぜですか。

基本的には、サブ結果finalを計算してから、結果をテストする前にpを変更するためです。したがって、有効な結果finalが見つかるたびに、結果として値p+1が間違って印刷されます。

ソリューション:あなたのループ内の文の順序を変更します。それが書かれているものは何でも言語で

while (final - (int)(final) != 0&&p!=k) 
{ 
    p++; 
    final = System.Math.Sqrt(4 * k + System.Math.Pow(p, 2)); 
} 
関連する問題