找零问题贪心算法实现

找零问题贪心算法实现

一、 实验描述

当前有面值分别为2角5分,1角,5分,1分的硬币,请给出找n 分钱的最佳方案(要求找出的硬币数目最少)。

二、 实验原理

具体实例:

假如老板要找给我99分钱,他有上面的面值分别为25,10,5,1的硬币数,为了找给我最少的硬币数,那么他是不是该这样找呢,先看看该找多少个25分的, 99/25=3,好像是3个,要是4个的话,我们还得再给老板一个1分的,我不干,那么老板只能给我3个25分的拉,由于还少给我24,所以还得给我2个10分的和4个1分。 具体实现:

//找零钱算法

//By falcon

//输入:数组m ,依次存放从大到小排列的面值数,n 为需要找的钱数,单位全部为分 //输出:数组num ,对照数组m 中的面值存放不同面值的硬币的个数,就找钱方案 参考实验代码部分。

三、 实验代码

#ifndef LEASTCOINS_H

#define LEASTCOINS_H

class LeastCoins

{public:

};

#endif

#include

#include

#include

#include

#define N 10

ifstream inputFile("input.txt",ios::out);

ofstream outputFile("output.txt",ios::out); LeastCoins(); ~LeastCoins(); void run(); int number; // 不同面值的硬币个数 int TotalMoney; // 要找回的总钱数 int *T; // 存储硬币的面值 int *Coins; // 硬币的个数 int **m; // m[i][j] 是以 最大面值 i 要找回 钱数是 j 需要硬币数的 最少个数 bool input(); int changeMoney(int i,int j); // i 是 第 i 中硬币 void output(); void traceback(); // 寻找 轨迹 private:

LeastCoins::LeastCoins()

{

}

LeastCoins::~LeastCoins()

{

}

void LeastCoins::run()

{

{

}

int LeastCoins::changeMoney(int i,int j)

{

if (i>1) { if (j>number; outputFile>TotalMoney; outputFile=TotalMoney)return true; else outputFile>T[i]; inputFile>>Coins[i]; outputFile

} } } X=(X(T2+X-1)) m[i][j]=T2+X-1; else m[i][j]=T1+X; return m[i][j]; else if(i==1)// 此时 i==1 { } else return 1000000; if ((j%T[1])==0 && (j/T[1]

void LeastCoins::output()

{

}

void LeastCoins::traceback()

{

}

int main()

{

LeastCoins LC; LC.run(); return 0; int j=TotalMoney; for (int i=number;i>=2;i--) { } outputFile

四、 运行结果

图1 运行结果

五、 实验总结

对贪心算法不是特别熟悉,以至于在编写程序时遇到好多错误,好在差不多都改正了,此程序尚有不足之处,希望在以后的深入学习后能编写个更好的程序。

找零问题贪心算法实现

一、 实验描述

当前有面值分别为2角5分,1角,5分,1分的硬币,请给出找n 分钱的最佳方案(要求找出的硬币数目最少)。

二、 实验原理

具体实例:

假如老板要找给我99分钱,他有上面的面值分别为25,10,5,1的硬币数,为了找给我最少的硬币数,那么他是不是该这样找呢,先看看该找多少个25分的, 99/25=3,好像是3个,要是4个的话,我们还得再给老板一个1分的,我不干,那么老板只能给我3个25分的拉,由于还少给我24,所以还得给我2个10分的和4个1分。 具体实现:

//找零钱算法

//By falcon

//输入:数组m ,依次存放从大到小排列的面值数,n 为需要找的钱数,单位全部为分 //输出:数组num ,对照数组m 中的面值存放不同面值的硬币的个数,就找钱方案 参考实验代码部分。

三、 实验代码

#ifndef LEASTCOINS_H

#define LEASTCOINS_H

class LeastCoins

{public:

};

#endif

#include

#include

#include

#include

#define N 10

ifstream inputFile("input.txt",ios::out);

ofstream outputFile("output.txt",ios::out); LeastCoins(); ~LeastCoins(); void run(); int number; // 不同面值的硬币个数 int TotalMoney; // 要找回的总钱数 int *T; // 存储硬币的面值 int *Coins; // 硬币的个数 int **m; // m[i][j] 是以 最大面值 i 要找回 钱数是 j 需要硬币数的 最少个数 bool input(); int changeMoney(int i,int j); // i 是 第 i 中硬币 void output(); void traceback(); // 寻找 轨迹 private:

LeastCoins::LeastCoins()

{

}

LeastCoins::~LeastCoins()

{

}

void LeastCoins::run()

{

{

}

int LeastCoins::changeMoney(int i,int j)

{

if (i>1) { if (j>number; outputFile>TotalMoney; outputFile=TotalMoney)return true; else outputFile>T[i]; inputFile>>Coins[i]; outputFile

} } } X=(X(T2+X-1)) m[i][j]=T2+X-1; else m[i][j]=T1+X; return m[i][j]; else if(i==1)// 此时 i==1 { } else return 1000000; if ((j%T[1])==0 && (j/T[1]

void LeastCoins::output()

{

}

void LeastCoins::traceback()

{

}

int main()

{

LeastCoins LC; LC.run(); return 0; int j=TotalMoney; for (int i=number;i>=2;i--) { } outputFile

四、 运行结果

图1 运行结果

五、 实验总结

对贪心算法不是特别熟悉,以至于在编写程序时遇到好多错误,好在差不多都改正了,此程序尚有不足之处,希望在以后的深入学习后能编写个更好的程序。


相关内容

  • 证明人民币找零问题贪心算法正确性
  • 证明人民币找零问题贪心算法的正确性 问题提出: 根据人们生活常识,我们到商店里买东西需要找零钱时,收银员总是先给我们最大面值的,要是不够再找面值小一点的,直到找完为止.这就是一个典型的贪心选择问题. 问题描述: 当前有面值分别为100 元.50 元.20 元.10 元.5元.1元, 5角, 2角.1 ...

  • 动态规划解找零钱问题实验报告
  • 一.实验目的 (1) 熟练掌握动态规划思想及教材中相关经典算法. (2) 掌握用动态规划解题的基本步骤,能够用动态规划解决一些问题. 二.实验内容与实验步骤 (1) 仔细阅读备选实验的题目,选择一个(可选多个)作为此次实验题目,设 计的程序要满足正确性,代码中有关键的注释,书写格式清晰,简洁易懂,效 ...

  • 第4章贪心算法(0-算法思想)
  • 第4章 贪心算法 1 学习要点  贪心算法的基本思想  贪心算法的基本要素 (1)最优子结构性质 (2)贪心选择性质 贪心算法与动态规划算法的差异 正确性的证明 范例学习贪心设计策略 (1)活动安排问题: (4)单源最短路径: (2)最优装载问题: (5)最小生成树: (3)哈夫曼编码: (6) ...

  • 贪心算法设计及其实际应用研究
  • 哈尔滨师范大学 学 年 论 文 题 目 关于贪心算法研究 学 生 *** 指导教师 年 级 2009级 专 业 计算机科学与技术 系 别 计算机科学与技术 学 院 计算机科学与信息工程学院 哈尔滨师范大学 年 月 论 文 提 要 为满足人们对大数据量信息处理的渴望,解决各种实际问题,计算机算法学得到 ...

  • 最短路径问题设计论文
  • 目 录 第1章 绪论 ........................................................................................................................................... ...

  • 2015年算法分析与设计期末考试试卷B卷
  • 西南交通大学2015-2016学年第(一) 学期考试试卷 课程代码3244152课程名称算法分析与设计考试时间120分钟 阅卷教师签字: 填空题(每空1分,共15分) 1. 2. 3. 4. 5. 程序是(1) 用某种程序设计语言的具体实现. 矩阵连乘问题的算法可由(2)设计实现. 从分治法的一般设 ...

  • 贪心算法 最小生成树
  • 摘 要 网络的最小生成树在实际中有广泛的应用,例如,网络G表示n各城市之间的通信线路网线路(其中顶点表示城市,边表示两个城市之间的通信线路,边上的权值表示线路的长度或造价).可通过求该网络的最小生成树达到求解通信线路或总代价最小的最佳方案.本课程设计采用贪心算法中Prim算法解决最小生成树问题,贪心 ...

  • 算法设计期末总结
  • 第一部分:算法基础 1.算法五个特征: 零个或多个输入.至少一个输出.确定性.能行性.有穷性. 算法就是求解一类问题的任意一种特殊的方法. 联系:算法+数据结构=程序,算法是程序设计的核心,算法的好坏程度上决定了一个程序的效率.一区别:算法是解决问题的步骤,程序是算法的代码实现依靠程序来完成功能,程 ...

  • 20151112-JWJ-Algorithm-12-贪心算法
  • 湖南大学-算法设计与分析课程 Lecture 12-贪心算法 姜文君 [email protected] 办公室:信息科学与工程学院院楼326 2015-2016第一学期 回 顾 动态规划6案例, 矩阵连乘.最长公共子序列. 最大子段和可扩展. 凸多边形最优三角剖分. 多边形游戏更一般. 0-1背包为经 ...