• ベストアンサー

Do...Loopについてお伺いします

Visual Basic初心者です。演習問題に、 「1+2+3...=n<100となる最大のnを求めるアプリ。」を作成しなさい。 といったものがあり、添付画像のようにプログラムしてみたのですが、1+2+3...=n>100となる最小のnは求められても最大のnの求め方がわかりません。どうぞご教授ください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

>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 は等しいとすべきか、超えるとすべきかよく設問の趣旨に従ってください。

twin-dragon
質問者

お礼

早速の解答ありがとうございました。 考え方までご教示頂いたおかげで理解できました。 ありがとうございます。

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

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

twin-dragon
質問者

お礼

大変詳しくご教授頂、ありがとうございました。

  • weavaest
  • ベストアンサー率15% (157/1020)
回答No.2

これはDo Loopについての質問じゃないですよね。 条件をロジックに落とせない、要は考え方が分からないってことではないでしょうか。 求め方を教えて欲しいとのことですので、回答となるソースコードが欲しいってことでもないのですよね。 100を超える最小の値は求められるのに、100を超えない最大の値が求められないということで、どこがわからないのでしょうか。 もう少し、具体的にどう考えたとかの情報があれば回答しやすいと思います。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

要は、100を超える直前の結果を提示すればいいので l= 0 m = 0 n = 0 Do While m < 100 n = m '直前の結果の保存 l = l + 1 '加算する数値 m = n + l '加算後の結果 Loop

twin-dragon
質問者

お礼

明確に解答頂き、ありがとうございました。 大変助かりました。

関連するQ&A

専門家に質問してみよう