- ベストアンサー
Do...Loopについてお伺いします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>Do...Loopについてお 1づつ加える(自然)数を順次増やしていくという、ロジックにおいての質問でしょう。 >1+2+3...=の値はnが増えるにつれて、「単調増加」していくことはわかりますよね。 Snはnまでの自然数の和として s1<s2<s3<.... だから100を初めて超えたnのnー1(直前に足した数)が答えになる。直前に足した数を変数に毎度覚えておくか(これは回りくどい)、超えたところで、nに対し-1すればよいのでは。 前判定do loopより後判定do Loop・・whileのほうが書きやすい。しかし先生の指定があるなら仕方がないが。 ーー エクセルVBAでの例。 Sub test01() s = 0 n = 0 Do While s < 100 n = n + 1 s = s + n Loop 'loopを脱出した MsgBox "loopを脱出した加数" & n MsgBox "答えは" & n - 1 End Sub ーー 小生なら下記を書いてしまう。 Sub test02() n = 1 s = 0 For n = 1 To 100 s = s + n If s > 100 Then Exit For Next n MsgBox n - 1 End Sub (注)If s > 100 は等しいとすべきか、超えるとすべきかよく設問の趣旨に従ってください。
その他の回答 (3)
- kagakusuki
- ベストアンサー率51% (2610/5101)
1+2+3・・・+n=n×(n+1)/2 なのですから、 1+2+3・・・+n<100 という事は 100>1+2+3・・・+n=n×(n+1)/2=(n^2+n)/2 n^2+n<100×2 n^2+n-100×2<0 という事になります。 そして加算して行った結果が丁度100になる 1+2+3・・・+N=100 という場合に当てはまる様な値Nが存在していると仮定しますと、 n<N という事になりますし、Nの値は 100>1+2+3・・・+N=N×(N+1)/2=(N^2+N)/2 N^2+N-100×2=0 という2次方程式を解けば求める事が出来、二次方程式の一般の解を利用すれば N=(-1±√(1^2-4×1×(-100×2)))/(2×1)=(-1±√(1+8×100))/2 n<(-1±√(1+8×100))/2 になるのですから、一々、Do...LoopやFor...Nextの様な繰り返し処理を行わずとも、次の様な処理でもnの値を求める事が出来ます。 Sub Sample1() Dim m, n As Long m = 100 n = WorksheetFunction.RoundUp((Sqr(1 + 8 * m) - 1) / 2, 0) - 1 MsgBox "答えは" & n End Sub
お礼
大変詳しくご教授頂、ありがとうございました。
- weavaest
- ベストアンサー率15% (157/1020)
これはDo Loopについての質問じゃないですよね。 条件をロジックに落とせない、要は考え方が分からないってことではないでしょうか。 求め方を教えて欲しいとのことですので、回答となるソースコードが欲しいってことでもないのですよね。 100を超える最小の値は求められるのに、100を超えない最大の値が求められないということで、どこがわからないのでしょうか。 もう少し、具体的にどう考えたとかの情報があれば回答しやすいと思います。
- mshr1962
- ベストアンサー率39% (7417/18945)
要は、100を超える直前の結果を提示すればいいので l= 0 m = 0 n = 0 Do While m < 100 n = m '直前の結果の保存 l = l + 1 '加算する数値 m = n + l '加算後の結果 Loop
お礼
明確に解答頂き、ありがとうございました。 大変助かりました。
お礼
早速の解答ありがとうございました。 考え方までご教示頂いたおかげで理解できました。 ありがとうございます。