条件は以下の通りです
・お釣りは少なくなるようにする。
・保持金額>=支払金額で、支払金額>=保持金額エラーの場合は考えない。
・金額は500,100,50,10,5,1円で、1000円以上の場合は500円を使う。
・50,5円は0~1枚、100,10,1円は0~4枚までとして考える。
500円は0~いくつでも可能。
%10で1桁ずつ比較して、/10で桁移動 という具合プログラムを作成し、保持金1から徐々にエラーを直しつつ取り組み保持金99までは正常の結果が出ました。
保持金126で支払金32で動作させると、5円玉が0枚にならず、1枚と表示されてしまいます。
恐らく31行~35行が原因だと思うのですが、うまくプログラムが思いつきません。
どのように直したらいいでしょうか?
※(500円複数の場合も出来ていませんが、後で作成予定です。)
今のC言語の知識はfor文、if文、配列、関数呼び出しまで学習しております。
ご指導よろしくお願いいたします。
#include <stdio.h>
int main()
{
int x,y=126,z,a,b;
// printf("保持金額:");
// scanf("%d",&y);
printf("支払い金額:");
scanf("%d",&x);
for(z=1; z<=100; z*=10)
{
if(y%10>=x%10) //保持金 > 支払金
{
if(y%10<5)
{
printf("%d円玉%d枚\n",z,x%10);
printf("%d円玉0枚\n",z*5);
}
else if(x%10>=5)
{
printf("%d円玉%d枚\n",z,x%10-5);
printf("%d円玉1枚\n",z*5);
}
else if(y%10-5>=x%10)
{
printf("%d円玉%d枚\n",z,x%10);
printf("%d円玉0枚\n",z*5);
}
else
{
printf("%d円玉0枚\n",z);
printf("%d円玉1枚\n",z*5);
}
}
else if(x%10<=5)
{
printf("%d円玉0枚\n",z);
printf("%d円玉0枚\n",z*5);
x+=10;
}
else if((x%10-y%10)<=5 && y%10<5)
{
for(a=1; a<=y%10; a++)
{
if(x%10-a==5)
{
printf("%d円玉%d枚\n",z,x%10-5);
printf("%d円玉0枚\n",z*5);
x+=10;
}
}
}
else
{
printf("%d円玉0枚\n",z);
printf("%d円玉0枚\n",z*5);
x+=10;
}
x/=10; //桁数移動
y/=10; //桁数移動
}
return(0);
}