算法设计与分析第三版王晓东算法实现题部分答案_可复制编辑!

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法实现题3-7 数字三角形问题

问题描述:

给定一个由n行数字组成的数字三角形,如图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。

编程任务:

对于给定的由n行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。

数据输入:

有文件input.txt提供输入数据。文件的第1行是数字三角形的行数n,1n<=100。接下来的n行是数字三角形各行的数字。所有数字在0-99之间。

结果输出:

程序运行结束时,将计算结果输出到文件output.txt中。文件第1行中的数是计算出的最大值。

输入文件示例输出文件示例

input.txt output.txt

5 30

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

源程序:

#include "stdio.h"

void main()

{ int n,triangle[100][100],i,j;//triangle数组用来存储金字塔数值,n表示行数FILE *in,*out;//定义in,out两个文件指针变量

in=fopen("input.txt","r");

fscanf(in,"%d",&n);//将行数n读入到变量n中

for(i=0;i

for(j=0;j<=i;j++)

fscanf(in,"%d",&triangle[i][j]);

for(int row=n-2;row>=0;row--)//从上往下递归计算

for(int col=0;col<=row;col++)

if(triangle[row+1][col]>triangle[row+1][col+1])

triangle[row][col]+=triangle[row+1][col];

else triangle[row][col]+=triangle[row+1][col+1];

out=fopen("output.txt","w");

fprintf(out,"%d",triangle[0][0]);//将最终结果输出到output.txt中

}

算法实现题4-9 汽车加油问题

问题描述:

一辆汽车加满油后可行驶nkm。旅途中有若干加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产出一个最优解。

编程任务:

对于给定的n和k个加油站位置,编程计算最少加油次数。

数据输入:

由文件input.txt给出输入数据。第1行有2个正整数n和k ,表示汽车加满油后可行驶nkm,且旅途中有k个加油站。接下来的1行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。

结果输出:

将编程计算出的最少加油次数输出到文件output.txt。如果无法到达目的地,则输出"No Solution“。

输入文件示例输出文件示例

input.txt output.txt

7 7 4

1 2 3 4 5 1 6 6

源程序:

#include"stdio.h"

void main()

{ FILE *in,*out;

int i,s,n,k,x[100],sum=0;//x数组用来存储距离,sum表示加油次数,s表示加油后行驶的距离

in=fopen("input.txt","r"); //读入n,k以及距离

fscanf(in,"%d",&n);

fscanf(in,"%d",&k);

for(i=0;i<=k;i++) fscanf(in,"%d",&x[i]);

for(i=0;i<=k;i++){

if(x[i]>n) printf("No Solution!");}

for(i=0,s=0;i<=k;i++){

s+=x[i];

if(s>n) {sum++;

s=x[i];}

}

out=fopen("output.txt","w"); //输出结果sum到output.txt中

fprintf(out,"%d",sum);

}

算法实现题5-15 最佳调度问题

问题描述:

假设有n个任务由k个可并行工作的机器来完成。完成任务i需要的时间为ti。试设计一个算法找到出完成这个n个任务的最佳调度,使得完成全部任务的时间最早。

编程任务:

对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1-n。编程计算完成这n个任务的最佳调度。

数据输入:

由文件input.txt给出输入数据。第1 行有2个正整数n 和k。第2行的n个正整数是完成n 根任务需要的时间。

结果输出:

将计算出的完成全部任务的最早时间输出到文件output.txt。

输入文件示例输出文件示例

input.txt output.txt

7 3 17

2 14 4 16 6 5 3

源程序:

#include"stdio.h"

int len[100],t[100],best=1000,n,k;

int comp() //comp函数用来计算完成时间

{ int tmp=0;

for(int i=0;itmp) tmp=len[i];

return tmp;

}

void search(int dep) //search函数用来回溯搜索

{ if(dep==n){

相关文档
最新文档