質問: 消費税率を変更した際の2商品の合計金額の変動について プログラムを作る課題をしています。 例えば5%から8%に消費税が変わり、2商品の前税込み合計金額(この時は5%)が105円だったとき、 20+80 → 21+86=107 2+99 → 2+106=108 13+88 → 14+95=109 という風に価格が変わります。この時の最高金額を表示させたいです。 ただし、p円のm%での税込み価格はp*(100+m)/100の小数点を切り捨てた値を用いています。 <入力例> 5 8 105 8 5 105 0 0 0 <出力例> 109 103 自分で何処が間違っているかを確認している時に //abの前税込み合計金額が〜 コメントの行で aとbの値を表示させてみると、aとbの合計が前税込み合計金額と等しくなります。aとbそれぞれの前税込み金額の合計がnになるようにしたいです。 何処を直せばよいのか、教えてください。 ↓ ↓ 殆どの計算はできるようになりましたが 23 89 550 を計算した時などに0になってしまいます。 他の計算と何処が違うのかもよくわからないのですが、 まだ不味いところがあるのでしょうか? ``` #include int tax(int i, int j){ //税込にする関数 return i*((100+j)/100); } int main(){ int taxa,taxb,n,a,b,ans; while(1){ scanf("%d %d %d",&taxa,&taxb,&n); if(taxa==0 && taxb==0 && n==0){ //0 0 0で終了 break; } ans=0; for(a=1;aans){ ans=komi; } } } } printf("%d\n",ans); } return 0; } ``` 少し改善しました。 ``` #include #include double tax(int i, int j){ //税込みにする関数 return (double)(i*(100.0+j)/100.0); } int main(){ int n,a,b,ans; int taxa,taxb; while(1){ scanf("%d %d %d",&taxa,&taxb,&n); if(taxa==0 && taxb==0 && n==0){ break; } ans=0; for(a=1;a<=(n/2);a++){ for(b=n;b>=(n/2);b--){ if((int)tax(a,taxa)+(int)tax(b,taxa)==n){ //aとbの前税込み金額がnと等しくなればいい int komi=(int)tax(a,taxb)+(int)tax(b,taxb); if(komi>ans){ ans=komi; } } } } printf("%d\n",ans); } return 0; } ``` 最終的にできた成功コード ``` #include #include int tax(int i, int j){ //税込みにする関数 return i*(100.0+j)/100.0; } int main(){ int n,a,b,ans; int taxa,taxb; while(1){ scanf("%d %d %d",&taxa,&taxb,&n); if(taxa==0 && taxb==0 && n==0){ break; } ans=0; for(a=1;aans){ ans=bkomi; } }else if(akomi>n){ break; } } } printf("%d\n",ans); } return 0; } ```
回答: コピーして、scanfの所だけ変えてみたのですが、 http://codepad.org/hE1h8iMl 正しく動いているように見えますよ。 ans=846 でいいんですよね? どうにも開発環境の問題な気がします。 開発環境を教えていただけますか? また、ほかにも2点質問があるので、そちらもよろしく。 1.各if分の中に入っているかどうかをデバッガか何かで追えないでしょうか? デバッガの無い開発環境なら、暫定的に以下のように書き換えてみるといいと思います。 ``` if(条件AA){ printf("条件AA"); // 処理本体 } ``` 2. nの値を100,200,300,400,500,600と変えてみて、どの値がOKかNGかを調べてみてください。