C言語でお金支払最適化プログラムを作りたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
はなはな

C言語でお金支払最適化プログラムを作りたい

#1

投稿記事 by はなはな » 8年前

保持金額と支払金額を決めて、支払う各硬貨の枚数を求めるプログラムを作成しています。
条件は以下の通りです
・お釣りは少なくなるようにする。
・保持金額>=支払金額で、支払金額>=保持金額エラーの場合は考えない。
・金額は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枚と表示されてしまいます。

コード:

支払い金額:32
1円玉0枚
5円玉1枚
10円玉0枚
50円玉0枚
100円玉1枚
500円玉0枚
続行するには何かキーを押してください . . .
恐らく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);
}

アバター
usao
記事: 1887
登録日時: 11年前

Re: C言語でお金支払最適化プログラムを作りたい

#2

投稿記事 by usao » 8年前

オフトピック
まず,問題が良くわからないです.
y=126

>保持金
なのだと見受けますが…

>お釣りは少なくなるようにする

ということですが,お釣りが出ざるを得ない状況を考えるには,
保持金の総額ではなくて構成(各硬貨を何枚ずつ保持しているのか)の情報が与えられる必要があると思うのですが…?

アバター
GRAM
記事: 164
登録日時: 13年前
住所: 大阪

Re: C言語でお金支払最適化プログラムを作りたい

#3

投稿記事 by GRAM » 8年前

126円の構成が
100円x1
10円x2
5円x1
1円x1
という最適な構成とするなら
32円払うのに

100円と5円1枚ずつはあってるのでは...?

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語でお金支払最適化プログラムを作りたい

#4

投稿記事 by みけCAT » 8年前

GRAM さんが書きました:126円の構成が
100円x1
10円x2
5円x1
1円x1
という最適な構成とするなら
32円払うのに

100円と5円1枚ずつはあってるのでは...?
問題がよく理解できませんが、「お釣りは少なくなるようにする」という条件から100円玉1枚だけ出すのが正解なのではないでしょうか?
(お釣りの金額なのかお釣りの枚数なのかによっても変わってくるかな…?)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る