课程设计报告。
课程名称算法导论
课题名称。专业。
班级。学号。
姓名。指导教师。
2023年 12月 18 日。
《算法导论》课程设计任务书。
一、 课题:旅游预算。
一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有若干加油站,每个加油站收费不一定相同。
旅游预算有如下规则:
若油箱的油过半,不停车加油,除非油箱中的油不可支持到下一站;每次加油时都加满;在一个加油站加油时,司机要花费2元买东西吃;司机不必为其他意外情况而准备额外的油;汽车开出时在起点加满油箱;计算精确到分(1元=100分)。编写程序估计实际行驶在某路线所需的最小费用。
输入格式:第一行为起点到终点的距离(实数)
第二行为为汽车油箱的容量(升),第三个数是每升汽油行驶的公里数,第四行为起点加满油箱的费用,第五行是加油站的数量。(〈50)。接下去的每行包括两个实数,每个数据之间用一个空格分隔,其中第一个数是该加油站离起点的距离,第二个数是该加油站每升汽油的**(元/升)。
加油站按它们与起点的距离升序排列。所有的输入都有一定有解。
二、进度安排。
第 17 周星期一上午8:30—11:30 下午14:30—17:30
星期二上午8:30—11:30 下午14:30—17:30
星期三上午8:30——11:30 下午14:30—17:30
星期四上午8:30——11:30 下午14:30—17:30
三、参考书籍。
1、计算机算法设计与分析,王晓东编著电子工业出版社。
2、算法分析与设计及案例教程,师智斌等编著清华大学出版社。
3.数据结构课程设计案例精编 : 用c/c++描述李建学_李光元_吴春芳清华大学出版社 7-302-14536-9 2007
编程平台不限,c,c++,j**a等等。)
目录。1、系统需求分析 3
2、概要设计 3
3、详细设计 4
4、系统调试及结果分析 5
5、程序** 5
6、总结 8
1)初始化初始费用,加油站站数。
2)判断汽车在某个加油站能不能加油。
3)判断汽车在该加油站是否必须加油。
4)标志出汽车在某个加油站加油。
5)搜索所有的加油站,选取费用最少的方式加油。
6) 输出最少费用和汽车加油的总次数及汽车在某站加油的站数。
流程图。本程序中包含一个主函数和六个子函数,它们的函数名及功能分别如下:
void init();初始化cost[i],mark[i] 变量。
bool canoil(int i,int j);判断汽车在某个加油站能不能加油。
bool mustoil(int i,int j);判断汽车在该加油站是否必须加油。
void res();标志出汽车在某个加油站加油。
void search();搜索所有的加油站,选取费用最少的方式加油。
void print();输出最终结果。
运行结果如下图:
算法改进思想:增加加油站个数。
#include
#include<>
using namespace std;
double length,capacity,kilometer,start;
int n,flag,mark[52],sum=0;
double oil[52][2],cost[52];
void init()
for(int i=0;i<=52;i++)
cost[i]=0;mark[i]=0;
bool canoil(int i,int j)//该加油站能不能加油。
double sum=oil[j][0]-oil[i][0];
double remain=capacity-sum/kilometer;
if(remain<=capacity/2)
return 0;
bool mustoil(int i,int j)
double sum=oil[j+1][0]-oil[i][0];
if(capacity*kilometer
return 0;
void res()
int i,j;
for(i=0;i<=n;)
if(mark[i]!=0)
sum++;
i=mark[i];}
else break;}
void search()
int i,j,k;
double pay;
int pri,end;
for(i=n;i>=0;i--)假设在第i个加油站加满油。
flag=0;
if(i==n)
cost[i]=0;
elseelse if(canoil(i,j))}
void print()
int j,i;
printf("最小费费用为:%.2lf ",cost[0]+start);
printf("加油次数为:%d",sum);
for(i=0;i<=n;)
int main()
printf("起点到终点的距离为:")
scanf("%lf",&length);
printf("请输入油箱的容量:")
scanf("%lf",&capacity);
printf("每升汽油行驶的公里数为:")
scanf("%lf",&kilometer);
printf("在起点加满油箱的费用为:")
scanf("%lf",&start);
printf("加油站的数目:")
scanf("%d",&n);
/scanf("%lf %lf %lf %d",&capacity,&kilometer,&start,&n);
for(int i=1;i<=n;i++)
printf("加油站离起点的距离及每升汽油的**为:")
scanf("%lf %lf",&oil[i][0],&oil[i][1]);
init();
oil[n+1][0]=length;
oil[0][0]=0;
search();
res();
print();
/ int m;scanf("%d",&m);
我在调试过程中,发生了许多小细节上的问题,它们提醒了自己在以后编程的时候要注意细节,即使是一个括号的遗漏或者一个字符的误写都会造成大量的错误,浪费许多时间去寻找并修改,总结的教训就是写程序的时候,一定要仔细、认真、专注。
我还有一个很深的体会就是格式和注释,由于平时不注意格式和注释这方面的要求,导致有的时候在检查和调试的时候很不方便。有的时候甚至刚刚完成一部分的编辑,结果一不注意,就忘记了这一部分程序的功能。修改的时候也有不小心误删的情况出现。
如果注意格式风格,并且养成随手加注释的习惯,就能减少这些不必要的反复和波折。还有一点,就是在修改的时候,要注意修改前后的不同点在**,改后调试结果要在原有的基础上更加精确。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在梁强老师的辛勤指导下,终于游逆而解。同时,在梁强老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
计算机与通信学院课程设计评分表。
课程名称: 算法导论
教师签名。日期。
算法课程设计
目录。1 问题描述第1页。2 算法分析第2页。3 伪 第5页。4 设计流程第6页。5 演示程序设计第8页。6 测试与结论第16页。7 设计过程遇到的问题 思考及解决方法 第17页。八 总结第17页。1 问题描述。八皇后问题是一个古老而著名的问题,它是回溯算法的典型例题。该问题是十九世纪德国著名数学家...
算法课程设计
当一个问题具有最优子结构性质时,根据其具体情况可以用动态规划算法或者贪心算法来求解。但当问题同时具有贪心选择性质时,贪心算法则通常会给出一个更简单 直观和高效的解法。贪心算法则通常会给出一个更简单 直观和高效的解法。贪心算法通过一系列的选择来得到一个问题的解,并且每次贪心选择都能将问题化简为一个更小...
算法课程设计
算法课程设计 实践报告。所属学院。专业班级。学生姓名。学生学号。任课教师。2013年6 月30日。一 实践题目及内容 迷宫问题 回溯法,栈的应用 问题描述 迷宫问题是一个经典的程序设计问题,计算机解迷宫问题的基本思想是 穷举求解 的方法,即从入口出发,顺某一方向向前试探,若能走通,则继续往前走 否则...