消費税率を変更した際の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になってしまいます。
他の計算と何処が違うのかもよくわからないのですが、
まだ不味いところがあるのでしょうか?
C
1#include<stdio.h> 2 3int tax(int i, int j){ //税込にする関数 4 return i*((100+j)/100); 5} 6 7int main(){ 8 9 int taxa,taxb,n,a,b,ans; 10 11 while(1){ 12 scanf("%d %d %d",&taxa,&taxb,&n); 13 if(taxa==0 && taxb==0 && n==0){ //0 0 0で終了 14 break; 15 } 16 ans=0; 17 for(a=1;a<n;a++){ 18 for(b=1;b<(n/2);b++){ 19 if(tax(a,taxa)+tax(b,taxa)==n){ 20 //abの前税込み合計金額がnと一緒の時 21 int komi=tax(a,taxb)+tax(b,taxb); 22 if(komi>ans){ 23 ans=komi; 24 } 25 } 26 } 27 } 28 29 printf("%d\n",ans); 30 } 31 32 return 0; 33}
少し改善しました。
C
1#include<stdio.h> 2#include<stdlib.h> 3 4double tax(int i, int j){ //税込みにする関数 5 return (double)(i*(100.0+j)/100.0); 6} 7 8int main(){ 9 10 int n,a,b,ans; 11 int taxa,taxb; 12 13 while(1){ 14 scanf("%d %d %d",&taxa,&taxb,&n); 15 if(taxa==0 && taxb==0 && n==0){ 16 break; 17 } 18 ans=0; 19 for(a=1;a<=(n/2);a++){ 20 for(b=n;b>=(n/2);b--){ 21 if((int)tax(a,taxa)+(int)tax(b,taxa)==n){ 22 //aとbの前税込み金額がnと等しくなればいい 23 int komi=(int)tax(a,taxb)+(int)tax(b,taxb); 24 if(komi>ans){ 25 ans=komi; 26 } 27 } 28 } 29 } 30 31 printf("%d\n",ans); 32 } 33 34 return 0; 35} 36
最終的にできた成功コード
C
1#include<stdio.h> 2#include<stdlib.h> 3 4int tax(int i, int j){ //税込みにする関数 5 return i*(100.0+j)/100.0; 6} 7 8int main(){ 9 10 int n,a,b,ans; 11 int taxa,taxb; 12 13 while(1){ 14 scanf("%d %d %d",&taxa,&taxb,&n); 15 if(taxa==0 && taxb==0 && n==0){ 16 break; 17 } 18 ans=0; 19 for(a=1;a<n;a++){ 20 for(b=1;b<n;b++){ 21 int akomi=tax(a,taxa)+tax(b,taxa); 22 if(akomi==n){ 23 //aとbの前税込み金額がnと等しくなればいい 24 int bkomi=tax(a,taxb)+tax(b,taxb); 25 if(bkomi>ans){ 26 ans=bkomi; 27 } 28 }else if(akomi>n){ 29 break; 30 } 31 } 32 } 33 34 printf("%d\n",ans); 35 } 36 37 return 0; 38}
回答5件
あなたの回答
tips
プレビュー