• ベストアンサー

この問題の解き方分かりますか?

私は、初めてC++を学んでいる者です。 以下の問題を解こうとしているのですが、どのようなコードにすれば良いか悩んでいます。 分かる方いらっしゃいましたら、助けてください。 なお、問題1は大丈夫なのですが、その問題1を利用した問題2が分かりませんので、問題2の解法を教えて下さい。お願いします。 問題1.A社のパソコンが246,000円、B社のパソコンが285,000円で売られている。A社は13%引き、B社は20%引きになると言う。A,B社の値引き後の売価を求めるプログラムを作れ。ただし、消費税は5%とする。 (※扱う数値が32767よりも大きいので、long intを使うのは分かっています。そして、入出力は%ldで行う事も分かっています。) 問題2.前問において、b社の売価の方がA社の売価より安くなる為には、値引率を何%以上(整数)にすれば良いかを求めるプログラムを作れ。 ヒント:A,B社の定価をそれぞれa,bとすると以下の式を満足するxを求めればよい。記号%を出力したい時は%を2つ続けて%%と書くようにJIS Cで規定されている。 ちなみに、今までならったのは「printf」「scanf」「int」「float」「char」「long int」「short int」「double」「long double」です。if文みたいな文法は習っていないので、これらを利用した解法をお願いします。

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

  • ベストアンサー
  • layer13
  • ベストアンサー率47% (37/78)
回答No.7

式を変形しましょう。何%以上ということは、=も有りだから x=の式にすればいいはず。 printf()の引数に比較の文を書いても全然意味がないことに注意。 比較の結果の、真か偽かその数値が出るだけです。 #Cの定義から行くと、0か0以外の数値になるはず ほんと、実行結果はどうだったんでしょうね…

その他の回答 (8)

回答No.9

> 色々と考えた結果、このようなコードになり、満足のいく結果になりました。 > #include <stdio.h> > main() > { float a,b; > scanf("%d %d",&a,&b); > printf("%3.0f%%以上",((0.87*a)/b)*100); > } > これで合っていますか? 満足のいく結果になったんなら合っているんじゃないですか。 # 僕にはこれでちゃんと動くとはとうてい信じられないけど

回答No.8

プログラムの前に'算数'だなぁ。 a*0.87 > b*(1-x) -a*0.87 < b*x - b -a*0.87 + b < b*x (-a*0.87 + b)/b < x x が '左辺'より大きいことが要件を満たす条件です。 つまり、求める値は'左辺'です。 a, b の値はわかっていますね?

bouzu_e
質問者

補足

色々と考えた結果、このようなコードになり、満足のいく結果になりました。 #include <stdio.h> main() { float a,b; scanf("%d %d",&a,&b); printf("%3.0f%%以上",((0.87*a)/b)*100); } これで合っていますか? このコードでいきたいと思います。

回答No.6

> 過去の問題などを参考にして以下のようなコードを考えました。 > > #include <stdio.h> > main() { > float a,b,x; > scanf("%d %d",&a,&b); > printf("%d%%以上",a*0.87>b*(1-x)); > } で、コンパイルしましたか? 実行しましたか? 結果はどうなりましたか? "%d" の意味はわかっていますか? a, b は何ですか? x は何ですか?

回答No.5

お悩みの問題は、下記のご質問記載内容より、 >※扱う数値が32767よりも大きいので、long intを使うのは分かっています。そして、入出力は%ldで行う事も分かっています。) 変数の宣言を全て long int にしていませんか? No3の方がアドバイスされているように、問題2では小数を扱うのでFloat等の実数型の変数を使うべきなのにlong intを使っているのでは? 当然、変数の型が変われば入出力の書式も変わりますね! P.S.  問題1においても普通はlong intを使わずにFloatを使うと思うのですが....

bouzu_e
質問者

補足

実際にfloatを使ってコードを書いています。 なので、おそらく変数の定義では、問題ないのかと思うのですが…。

回答No.4

> 以下の問題を解こうとしているのですが、どのようなコードにすれば良いか悩んでいます。 何を/どう悩んでいるかを書いてください。 あるいは書きかけでも構わないからコードを見せてください。 コードを書き、 コンパイルし、 実行し、 期待する結果と比較し、 一致すればOK。 一致しなかったらその原因を探ってください。 # これをやらないといつまでたっても習得できませんよ。 質問は結果が一致せず、その原因を掴めなかったときでも遅くありません。

bouzu_e
質問者

補足

過去の問題などを参考にして以下のようなコードを考えました。 #include <stdio.h> main() { float a,b,x; scanf("%d %d",&a,&b); printf("%d%%以上",a*0.87>b*(1-x)); }

  • timber
  • ベストアンサー率29% (218/739)
回答No.3

ヒントだけです。 小数の計算が入ってきますので、「int」「long int」「short int」ではなく、 「float」「double」「long double」を使用してください。 「int」「long int」「short int」は整数しか扱えません。

bouzu_e
質問者

お礼

一応、コードでintやlong intなどは使用していません。 やはり、xをどのようにすれば求まるのかが分かりません。 回答ありがとうございました。参考になりました。

  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.2

C++はひとまず置いといて、単に数学の問題として解けますか(計算の仕方がわかりますか)? 「数学としては判るけど、C++でどう組んだらよいか分からない」のか、 そもそも「数学としてもどう計算すればよいのか分からない」のかどちらの状態でお悩みなんでしょうか?

bouzu_e
質問者

補足

回答ありがとうございます。 計算方法としては、xを求めるように計算すればよいと言う事は分かっています。 私は、それをC++のコードで書くとしたら、どのようになるのかが知りたいのです。

  • ceita
  • ベストアンサー率24% (304/1218)
回答No.1

>A,B社の定価をそれぞれa,bとすると以下の式を満足するxを求めればよい とのことなので、 単純に計算するだけだとおもいますが? 参考までにその式も教えてもらえると、 回答しやすいと思います。

bouzu_e
質問者

補足

遅くなってスイマセンでした。 以下の式を満足するxを求めればよいと言っている式は、これです。 a*0.87>b*(1-x) よろしくお願いします。

関連するQ&A