找零钱问题 (ChangeNote.cpp)

找零钱问题

 (ChangeNote.cpp)

【题目描述】

    人民币中10圆以下的零钞可以由5圆、1圆、5角、1角、5分和1分组成。编写一个给出找零钱时纸币和硬币数目最少的方案的程序。例如,找零钱6.78圆的最佳方案是51张、11个、51个、12个、51个和13个。

【解题思路】

    从面值最大的零钞开始搜索,只要零钱总额超过其值,该钞需要一张/个,否则比较下一个稍小的零钞。上述策略,在剩余零钱总额(原零钱总额扣除那张/个的余额)不为零时重复进行,直到余额为零。

【输入】

        输入ChangeNote.in中包含1个表示零钱的实数。

【输出】

        输出ChangeNote.out如输出样例,为最佳找零方案。

【输入输出样例1】

ChangeNote.in

ChangeNote.out

6.78

  伍圆: 1

  壹圆: 1

  伍角: 1

  壹角: 2

  伍分: 1

  壹分: 3


#include 
#include 
int main()
{ int sc[6]={500, 100, 50, 10, 5, 1};	// 6种零钞的面值,单位是分
  int num[6]={0};	// 存储找零最优方案,即6种零钞的数目
  float m;
  int mint;	// 存放当前零钱面值总额
  int i;
  scanf("%f",&m);	// 输入零钱金额,单位是元
  mint=int(m*100+0.5);
  for(i=0;i<6;i++)
  {
	num[i]=mint/sc[i];
	mint-=sc[i]*num[i];
  }
  for(i=0; i<6; i++)
    if(num[i]!=0)
      switch(i)
      { case 0: printf("  伍圆: %d\n",num[0]); break;
        case 1: printf("  壹圆: %d\n",num[1]); break;
        case 2: printf("  伍角: %d\n",num[2]); break;
        case 3: printf("  壹角: %d\n",num[3]); break;
        case 4: printf("  伍分: %d\n",num[4]); break;
        default: printf("  壹分: %d\n",num[5]);
      }

  return 0;
}



猜你喜欢

转载自blog.csdn.net/AengusChen/article/details/76387781
今日推荐