2017-06-27 6 views
-1

私はC#で完全な初心者です。だから私はこの練習問題を解決しようとしています:このC#エクササイズを解決するためのより良い方法はありますか?

あなたは少し速すぎて運転しており、警察官があなたを止めています。 int値としてエンコードされた結果を計算するコードを書く:0 =チケットなし、1 =小さなチケット、2 =大きなチケット。速度が60以下の場合、結果は0になります。速度が61以上80以下の場合、結果は1になります。速度が81以上の場合、結果は2になります。誕生日でない限り - その日、全ての場合において、速度は5倍高くなり得る。それは働いていた

class SpeedLimit 
{ 
    public int CaughtSpeeding(int speed, bool isBirthday) 
    { 
     if (speed < 61 || (speed < 66 && isBirthday == true)) 
     { 
      return 0; 
     } 

     else if (speed >= 61 && speed <= 80 && isBirthday == false) 
     { 
      return 1; 
     } 

     else if (speed >= 66 && speed <= 85 && isBirthday == true) 
     { 
      return 1; 
     } 
     else 
      return 2; 
    } 
} 

が、私は手動で誕生日の場合は5を毎回追加する必要がありました:

私は、次の方法でそれを解決しました。私はこの運動の意図ではないと思う。これを解決する他の便利な方法がありますか?

+1

を考えます。 – byxor

+2

すでに解決策があるので、この質問は[コードレビュー](https://codereview.stackexchange.com/)に適しています。 – krillgar

+0

@krillgar私の謝罪。私はこのフォーラムの初心者で、まだルールや規制に慣れています。だから、働くソリューションはこのコミュニティにはスコープがありませんか? –

答えて

3

最速の勝利はあなたの速度オフ5をノックして、誕生日に対処することです。

public int CaughtSpeeding(int speed, bool isBirthday) 
{ 
    if (isBirthday) speed -= 5; 
    /*Birthday fully considered*/ 
+1

このアルゴリズムは正しく動作しますが、「速度」は人が動いている速度を表しなくなります。私はそれが構造的に誤解を招くと考えています。変数を再利用すると、問題が発生する可能性があります。 – byxor

+4

@byxor:フェアポイント。あなたは新しい変数 'effective_speed = isBirthday?速度 - 5:速度; – Bathsheba

+0

の場合、すべてのケースで要件が5つ高くなるため、+ = 5、なぜ - = 5になると予想されますか? – derloopkat

0

あなたは可能性が事前に計算スピードこれはコードロットクリーナーを作る5を減算するisBirthdayを使用して変数に。

class SpeedLimit 
{ 
    public int CaughtSpeeding(int speed, bool isBirthday) 
    { 
     var measuredSpeed = isBirthday 
           ? speed - 5 
           : speed; 

     if (measuredSpeed < 61) 
     { 
      return 0; 
     } 
     else if (measuredSpeed >= 61 && 
       measuredSpeed <= 80) 
     { 
      return 1; 
     } 
     else 
     { 
      return 2; 
     } 
    } 
} 
+0

'measuredX'は通常、測定した未処理のXを意味し、処理済みのXは未処理のXを意味しません。 –

0

少しの数学も役に立ちます。 6080の差が20である場合は、オフセットを40と見なします。これは、計算の要素によって速度を減ずることを考慮したものであるとも述べています。チケットの価値はこのように計算されます。

ticket = Min(Max(speed - 1 - 40, 0)/20, 2); 

あなたは `SpeedIsInRange(startInclusive、endInclusive)`関数を書く場合は、より多くのそれを好むかもしれない誕生日の時間

public static int CaughtSpeeding(int speed, bool isBirthday) 
{ 
    if(isBirthday) speed -= 5; 
    return (int)Math.Min(Math.Max(speed - 1 - 40, 0)/20, 2); 
} 
関連する問題