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

[問題]通話時間(秒単位)を入力し,通話料を計算し出力するプログラムを書け.なお,通話料は,以下のようにして計算するものとする.
通話時間≦基本通話時間( 1151 秒)  基本料金:882円
基本通話時間を 183 秒超える毎に 9 円ずつ加算

この問題がよくわかりません。一応自分で組んでみて実行してみたのですがどうやら出てくる答えが違うようです。(因みにC言語で書きました。)どなたか教えてくれないでしょうか??

A 回答 (5件)

「基本通話時間を 183 秒超える毎に 9 円ずつ加算」の表現が不思議ですよね。


このままだと、(1151 + 1)~(1151+183) は基本料金のままになります。業界の常識は知らないのですが、世間一般は、基本通話時間を1秒でも越えたら加算されると考えます。
プログラムは、
前者なら 
sec <= 1151 ? 882 : (sec - 1151)/183 * 9 + 882;
後者なら
sec <= 1151 ? 882 : ((sec - 1151 - 1)/183 + 1) * 9 + 882;
です。
後者は、この種の計算のよくあるパターンです。
    • good
    • 0

#include(stdio.h)



void main(void)
{
int p,answer;

printf("通話時間(秒単位)を入力\n")
scanf("%d",&p);

if(p <= 1151)
{
printf("基本料金は882円\n")
}
else
{
answer = ((p/183)*9)+882
printf("基本料金は%d円\n",answer)
}
}

これで駄目かな。
    • good
    • 0

★アドバイス


・回答者 No.2 さんの if 判定を反転して、基本通話時間を超えた分を money に
 加算する方法です。このため、最初 money には基本料金の 882 をセットしておくこと。

サンプル:
int telephone = 12345; ←通話時間
int money = 882; ←基本料を最初にセットしておく

if ( telephone > 1151 ){ ←基本通話時間を越えたら
 money += ((telephone - 1151) / 183) * 9; ←183 秒毎に 9 円ずつ加算
}

その他:
・基本通話時間を越えたら、基本通話時間(1151)を引いた通話時間を 183 秒で割って
 183 秒のブロックがいくつあるのか求めます。求めた数に 9 円をかければ基本通話時間を
 越えた金額が求まります。これを基本料金の money(882) に加算すればよいのです。
・以上。参考に!
    • good
    • 0

// 通話時間はtelltime


// 料金はmoney
if(telltime<=1151){
money = 882;
}
else{
money = ((telltime-1151)/183)*9+882;
}

でどうでしょう?
    • good
    • 0

★補足要求します。


>一応自分で組んでみて実行してみたのですがどうやら出てくる答えが違うようです。
 ↑ならそのソースを補足に貼り付けてみて下さい。
・以上。待っています。
    • good
    • 0

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