• 締切済み

非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示

非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示するというプログラミングなのですが・・・ #include <stdio.h> int main(void) { int n,m=■ , sum=0; do { printf("非負整数: "); scanf("%d", &n); } while (n■0); while (sum■n) { ■ ; sum +=■; } printf("1+2+・・・+m> %dとなる最小の整数mは%dである。\n", n, m); return (0); } ■のところがわかる方どうにかお願いします!!

みんなの回答

noname#153037
noname#153037
回答No.3

//*********************************************  // こんな感じでどうでしょうか? 間違っていたらすみません。  //*********************************************  #include <stdio.h> int main(void) { int n,m=0 , sum=0; do { printf("非負整数: "); scanf("%d", &n); } while (n<=0); while (sum<=n) { sum +=++m; if(sum>n) break; } printf("1+2+・・・+m> %dとなる最小の整数mは%dである。\n", n, m); return (0); }

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

手で計算するとき、どういう風にしますか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

自分でこのプログラムを作るとしたらどうするか、を考えれば、それぞれの箇所で何をするとよいのかわかるのではないでしょうか。 > int n,m=■ , sum=0; 変数の宣言と初期化しかできない箇所なので、mの初期値が入ります。int型なので整数です。 sumは1+2+...+mの合計値、 変数mはそのmですから、sum=0のときはmは何になるでしょうか? (1+2+....+m = 0+1+2+...+m です) > } while (n■0); このループの目的を考えましょう。 入力された値が不正な場合、入力を繰り返す、というエラー処理の方法の一つです。 では、ここでいう「不正な値」とはどうなるでしょう? >while (sum■n) { >■ ; >sum +=■; >} この「問題」を解く単純は方法は、 m=1,2,3,...と増やしていって、 1+2+...+m > nになっているかどうか調べて、始めてそうなっていたときmが答え、というものです。 必要なことは ・sumとnの大小関係を調べる。その結果でループを続けるかやめるか決定する。 ・mを増やす。 ・sumの計算をする。 1+2+..+m = (1 +2+..+m -1)+m だから、直前のsumにmを足すと新しいsumになる。 です。

関連するQ&A