性格いい人が優勝

非負整数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);
}

■のところがわかる方どうにかお願いします!!

A 回答 (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);
}
    • good
    • 0

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

    • good
    • 0

自分でこのプログラムを作るとしたらどうするか、を考えれば、それぞれの箇所で何をするとよいのかわかるのではないでしょうか。



> 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になる。
です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!