C课程设计分油问题_c课程设计分油问题

其他范文 时间:2020-02-27 16:28:31 收藏本文下载本文
【www.daodoc.com - 其他范文】

C课程设计分油问题由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c课程设计分油问题”。

《程序设计课程设计》报告

设计题目:分油问题

分油问题。现有3斤、7斤、10斤的油桶三个,前2个是空桶,10斤的油桶装满了油,现要求借助这些桶分出二个5斤的油于油桶中,问:

1、应如何倒法?

2、将油从一个桶倒入另一个桶称为一次操作,如果限制倒油的总次数为N,程序怎么编写?

3、能否找出所需的最少次数?

注意倒油的规则:

1、只能使用这些油桶;

2、倒油时,要么把自己倒空,要么把目标桶倒满。

一、设计任务

写明设计题目的具体任务内容及要求。

二、设计目的本课程设计主要训练学生在C/C++语言迭代递归方面应用能力。

三、功能描述

简要给出程序的几个模块功能的文字说明及总体结构图。

四、总体设计

1、功能模块设计

具体介绍主函数及各个模块的构成及功能

2、数据结构设计

具体介绍本程序中关键的数据结构

3、函数功能描述

对自定义函数给出返值形式的简介。

五、程序实现

1、源码分析

对预处理、主函数、主菜单、各模块的程序代码列出,适当给与行尾注释 #include using namespace std;

#define Max 100

struct Total { int Array[Max];//倒油路径

int number;//倒油次数

};

int values[Max];//状态数组

int Species[Max][Max];int N=0;int M=0;Total Poiblity[Max];

int min(int a,int b)//比较两者大小并返回最小值

{ if(a>b)return b;else return a;}

int ContainN(int n,int i)//判断values数组中是否含有n { for(int j=0;j

return 1;} return 0;}

void Strcpy(int a[],int b[],int n)//拷贝a到b { for(int i=0;i

void f(int a,int b,int c,int d[],int M)//获得倒油过程

{ int x;int e[Max];int n=a*100+b*10+c;if(n==55){

for(int j=0;j

Species[N][j]=d[j];//拷贝

N++;} else if(ContainN(n,M))//遇到有相同状态就返回重新选择

return;else {

values[M]=n;d[M]=n;M++;Strcpy(d,e,M);if(a

//a桶容量为3,b桶容量为7,c桶容量为10 { if(b>0)//若a,b桶内油体积大于3,则将b桶内油倒出使a桶满

{

x=min(3-a,b);//若a,b桶内油体积小于3,则将b桶内油全部倒出,倒进a桶

f(a+x,b-x,c,e,M);} if(c>0)//若a,c桶内油体积大于3,则将b桶内油倒出使a桶满

{

x=min(3-a,c);//若a,c桶内油体积小于3,则将b桶内油全部倒出,倒进a桶

f(a+x,b,c-x,e,M);} } if(b0)//若a,b桶内油体积大于7,则将a桶内油倒出使b桶满

{

x=min(7-b,a);//若a,b桶内油体积小于7,则将a桶内油全部倒出,倒进b桶

f(a-x,b+x,c,e,M);} if(c>0)//若b,c桶内油体积大于7,则将c桶内油倒出使b桶满

{

x=min(7-b,c);//若b,c桶内油体积小于7,则将c桶内油全部倒出,倒进b桶

f(a,b+x,c-x,e,M);

} } if(c0)//若a,c桶内油体积大于10,则将a桶内油倒出使c桶满

{ x=min(10-c,a);//若a,c桶内油体积小于10,则将a桶内油全部倒出,倒进c桶

f(a-x,b,c+x,e,M);} if(b>0)//若b,c桶内油体积大于10,则将b桶内油倒出使c桶满

{ x=min(10-c,b);//若b,c桶内油体积小于10,则将b桶内油全部倒出,倒进c

} } f(a,b-x,c+x,e,M);

} }

void DispAll()//输出各种可能的情况

{ int i;for(i=0;i

{

Poiblity[M].Array[j]=Species[i][j];

cout

j++;} Poiblity[M].number=j;M++;} }

int Disp(int a)//符合限制条件的输出

{ int m=0;cout

cout

for(int j=0;j

cout

m++;} } if(!m)cout

int LeastNumber()//求倒油次数最少的步骤

{ int a[M];for(int i=0;i

int Min=Poiblity[0].number;for(int m=1;m

Min=Poiblity[m].number;} return Min;}

void DispLeast()//最少倒油次数的输出 { int m=LeastNumber();cout

for(int j=0;j

cout

p[i]=0;f(0,0,10,p,0);cout>a;Disp(a);DispLeast();}

2、运行结果及界面介绍

设计输入数据,给出输出结果及界面反映

下载C课程设计分油问题word格式文档
下载C课程设计分油问题.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文