電子書籍の厳選無料作品が豊富!

不等式を解かせるプログラムをつくりたいです(自然数の範囲で)
1000kがk^2+19より小さくなるのはいつかという問題で考えて下のプログラムを書きました。
しかし出力が46342となり答えと一致しませんでした。
どこが問題なのですか?
またなぜこんな答えが出てきたのかも教えて頂けると幸いです。

「プログラム 不等式」の質問画像

質問者からの補足コメント

  • 画像が見にくいのでかきます
    すいません

      補足日時:2017/01/09 01:44
  • #inclued <stdio.h>

    int main()
    {
    int A,B,k;
    A=k*k+19;
    B=1000*k;
    for(k=0;B<A;k++)
    A=k*k+19;
    B=1000k;
    printf("%d",k);
    return 0 ;
    }


    kに1からずっと代入していって解を求めるほうほうが知りたいです。
    (もっと効率的な方法もあると思いますが)

      補足日時:2017/01/09 01:53
  • #inclued <stdio.h>

    int main()
    {
    int A,B,k;
    A=k*k+19;
    B=1000*k;
    for(k=0;B<A;k++)
    ;
    printf("%d",k);
    return 0 ;
    }
    とすると出力が何もされませんでした何故ですか?

      補足日時:2017/01/09 01:56

A 回答 (3件)

間違いは2箇所あります。



まず、これだとA, B を初期化する時に不明な k が使われてしまいます。

次に、for 文のループ範囲が示されていません。これでは
A=k*k+19;
だけが更新されることになってしまいます。
A と B は、判定式の中で毎回更新した方がいいので、


#include <stdio.h>

#define A(x) ((x)*(x)+19)
#define B(x) ((x)*1000)

int main()
{
int k;

for( k=0; A(k)<B(k); k++ );
printf( "%d¥n", k );
return( 0 );
}

のように、マクロ定義してしまった方が可読性がよくなると思います。
    • good
    • 0

こうしたいんですかねぇ。



https://code.hackerearth.com/47474fO
    • good
    • 0

>for(k=0;B<A;k++)


>;
>printf("%d",k);
>とすると出力が何もされませんでした何故ですか?

forループの中で終了条件ご永遠に満たされないので、『なにもしない』という処理を続けるからです。
for文の前に書いた
>A=k*k+19;
>B=1000*k;
という式をfor文の中で処理する。
といことを期待しているのでしょうが、C言語での記述では『あとで処理する式』ではなく『そこで実行される代入式』です。
# だから、コンパイル時にkが未初期化だ。というような警告がでる。
    • good
    • 0

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