2017-05-26 15 views
1

1つだけ残るまで数千のアイテムを間引くことができますか?そうであれば、デシメーションサイクルは何回必要ですか?デシメートすると、10分の1を取り除いて残りの部分を残すことを意味します。たとえば、1サイクル目:1000〜900(10分の100を取り除きます) 2サイクル目:900〜810DECIMATION LOGIC

+0

多分にそれを尋ねる[MathOverflow](https://mathoverflow.net/) – jhhoff02

+0

私は、彼らが今のことをさせて頂いてます疑います私はここに投稿しました –

+0

@ jhhoff02この質問は、[MathOverflow](https://mathoverflow.net/)のトピックではない可能性があります。 [MathOverflow](https://mathoverflow.net/)は、研究レベルの数学の質問のみです。詳細については、[ヘルプセンター](https://mathoverflow.net/help/on-topic)を参照してください。 – Pang

答えて

0

これは依存します使用する数値型。 あなたは浮動小数点数を使用する場合は、最終的には(ない正確ただし、次のJavaプログラムの出力が示すように)1よりも小さい値に到達します:出力から

class Main { 
    public static void main(String[] args) { 
    int i = 0; 
    double val = 1000; 
    while (val > 1) { 
     val -= val/10; 
     i++; 
     System.out.println("val = " + val + " in iteration " + i); 
    } 
    } 
} 

抜粋:

val = 900.0 in iteration 1 
val = 810.0 in iteration 2 
val = 729.0 in iteration 3 
... 
val = 1.0611166119964726 in iteration 65 
val = 0.9550049507968253 in iteration 66 

整数型を使用した場合、val == 9になると、結果は0になるので、willは1に到達しません。無限ループを防ぐためにその状態を捕らえるためのチェックを追加しました。

のは、見てみましょう:

class Main { 
    public static void main(String[] args) { 
    int i = 0; 
    int val = 1000; 
    while (val > 1) { 
     int subtract = val/10; 
     if (subtract == 0) { 
     System.out.println("subtracted value is 0 for value " + val + " at iteration " + i); 
     break; 
     } 
     val -= subtract; 
     i++; 
     System.out.println("val = " + val + " in iteration " + i); 
    } 
    } 
} 

出力:

val = 900 in iteration 1 
val = 810 in iteration 2 
... 
val = 10 in iteration 49 
val = 9 in iteration 50 
value 9 repeats at iteration 50