算法课程设计

发布 2022-10-01 22:00:28 阅读 9511

课程设计报告。

课程名称算法导论

课题名称。专业。

班级。学号。

姓名。指导教师。

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日。一 实践题目及内容 迷宫问题 回溯法,栈的应用 问题描述 迷宫问题是一个经典的程序设计问题,计算机解迷宫问题的基本思想是 穷举求解 的方法,即从入口出发,顺某一方向向前试探,若能走通,则继续往前走 否则...